Ligação Segura com a Comunicação Remota Holográfica e a API de Windows Mixed Reality
Lembre-se de que tem de implementar aplicações remotas e de leitor personalizadas se quiser ativar a segurança da ligação. Pode utilizar os exemplos fornecidos como pontos de partida para as suas próprias aplicações.
Para ativar a segurança, chame ListenSecure()
em vez de Listen()
e ConnectSecure()
em vez de Connect()
estabelecer a ligação remota.
Estas chamadas exigem que forneça implementações de determinadas interfaces para fornecer e validar informações relacionadas com segurança:
- O servidor tem de implementar um fornecedor de certificados e um validador de autenticação
- O cliente tem de implementar um fornecedor de autenticação e um validador de certificados.
Todas as interfaces têm uma função que lhe pede para tomar medidas, que recebe um objeto de chamada de retorno como parâmetro. Com este objeto, pode implementar facilmente o processamento assíncrono do pedido. Mantenha uma referência a este objeto e chame a função de conclusão quando a ação assíncrona estiver concluída. A função de conclusão pode ser chamada a partir de qualquer thread.
Dica
A implementação de interfaces WinRT pode ser feita facilmente com C++/WinRT. O capítulo Author APIs with C++/WinRT (Criar APIs com C++/WinRT ) descreve-o em detalhe.
Importante
O build\native\include\HolographicAppRemoting\Microsoft.Holographic.AppRemoting.idl
pacote NuGet no interior contém documentação detalhada para a API relacionada com ligações seguras.
Implementar um fornecedor de certificados
Os fornecedores de certificados fornecem à aplicação de servidor o certificado a utilizar. A implementação consiste em duas partes:
Um objeto de certificado, que implementa a
ICertificate
interface:-
GetCertificatePfx()
deve devolver o conteúdo binário de umPKCS#12
arquivo de certificados. Um.pfx
ficheiro contémPKCS#12
dados, pelo que os respetivos conteúdos podem ser utilizados diretamente aqui. -
GetSubjectName()
deve devolver o nome amigável que identifica o certificado a utilizar. Se não for atribuído nenhum nome amigável ao certificado, esta função deverá devolver o nome do requerente do certificado. -
GetPfxPassword()
deve devolver a palavra-passe necessária para abrir o arquivo de certificados (ou uma cadeia vazia se não for necessária nenhuma palavra-passe).
-
Um fornecedor de certificados a implementar a
ICertificateProvider
interface:-
GetCertificate()
deve construir um objeto de certificado e devolvê-lo ao chamarCertificateReceived()
no objeto de chamada de retorno.
-
Implementar um validador de autenticação
Os validadores de autenticação recebem o token de autenticação enviado pelo cliente e respondem com o resultado da validação.
Implemente a interface da IAuthenticationReceiver
seguinte forma:
-
GetRealm()
deve devolver o nome do realm de autenticação (um realm HTTP utilizado durante o handshake de ligação remota). -
ValidateToken()
deve validar o token de autenticação de cliente e chamarValidationCompleted()
no objeto de chamada de retorno com o resultado da validação.
Implementar um fornecedor de autenticação
Os fornecedores de autenticação geram ou obtêm o token de autenticação a ser enviado para o servidor.
Implemente a interface da IAuthenticationProvider
seguinte forma:
-
GetToken()
deve gerar ou obter o token de autenticação a ser enviado. Quando o token estiver pronto, chame oTokenReceived()
método no objeto de chamada de retorno.
Implementar um validador de certificados
Os validadores de certificados recebem a cadeia de certificados enviada pelo servidor e determinam se o servidor pode ser fidedigno.
Para validar certificados, pode utilizar a lógica de validação do sistema subjacente. Esta validação do sistema pode suportar a sua própria lógica de validação ou substituí-la completamente. Se não transmitir o seu próprio validador de certificados ao pedir uma ligação segura, a validação do sistema será utilizada automaticamente.
No Windows, a validação do sistema irá verificar:
- Integridade da cadeia de certificados: os certificados formam uma cadeia consistente que termina num certificado de raiz fidedigna
- Validade do certificado: o certificado do servidor está dentro do período de validade e é emitido para autenticação do servidor
- Revogação: o certificado não foi revogado
- Correspondência de nome: o nome do anfitrião do servidor corresponde a um dos nomes de anfitrião para os qual o certificado foi emitido
Implemente a interface da ICertificateValidator
seguinte forma:
-
PerformSystemValidation()
deve devolvertrue
se uma validação do sistema, conforme descrito acima, deve ser efetuada. Neste caso, o resultado da validação do sistema é transmitido como uma entrada para oValidateCertificate()
método . -
ValidateCertificate()
deve validar a cadeia de certificados e, em seguida, chamarCertificateValidated()
a chamada de retorno transmitida com o resultado final da validação. Este método aceita a cadeia de certificados, o nome do servidor com o qual a ligação está a ser estabelecida e se deve ser forçada uma verificação de revogação. Se a cadeia de certificados contiver vários certificados, o primeiro é o certificado de requerente.
Nota
Se o caso de utilização exigir uma forma diferente de validação (veja o caso de utilização do certificado n.º 1 acima), ignore totalmente a validação do sistema. Em vez disso, utilize qualquer API ou biblioteca que consiga processar certificados X.509 codificados com DER para descodificar a cadeia de certificados e efetuar as verificações necessárias para o seu caso de utilização.