Conexión segura con la comunicación remota holográfica y la API de Windows Mixed Reality
Recuerde que debe implementar aplicaciones remotas y de reproductor personalizadas si desea habilitar la seguridad de conexión. Puede usar los ejemplos proporcionados como puntos de partida para sus propias aplicaciones.
Para habilitar la seguridad, llame a ListenSecure()
en lugar de Listen()
, y ConnectSecure()
en lugar de Connect()
para establecer la conexión remota.
Estas llamadas requieren que proporcione implementaciones de determinadas interfaces para proporcionar y validar información relacionada con la seguridad:
- El servidor debe implementar un proveedor de certificados y un validador de autenticación.
- El cliente debe implementar un proveedor de autenticación y un validador de certificados.
Todas las interfaces tienen una función que le solicita que realice una acción, que recibe un objeto de devolución de llamada como parámetro. Con este objeto, puede implementar fácilmente el control asincrónico de la solicitud. Mantenga una referencia a este objeto y llame a la función de finalización cuando se complete la acción asincrónica. Se puede llamar a la función de finalización desde cualquier subproceso.
Sugerencia
La implementación de interfaces de WinRT se puede realizar fácilmente con C++/WinRT. En el capítulo Author APIs with C++/WinRT (Api de autor con C++/WinRT ), se describe con detalle.
Importante
El build\native\include\HolographicAppRemoting\Microsoft.Holographic.AppRemoting.idl
elemento dentro del paquete NuGet contiene documentación detallada de la API relacionada con conexiones seguras.
Implementación de un proveedor de certificados
Los proveedores de certificados proporcionan la aplicación de servidor con el certificado que se va a usar. La implementación consta de dos partes:
Objeto de certificado, que implementa la
ICertificate
interfaz :GetCertificatePfx()
debe devolver el contenido binario de unPKCS#12
almacén de certificados. Un.pfx
archivo contienePKCS#12
datos, por lo que su contenido se puede usar directamente aquí.GetSubjectName()
debe devolver el nombre descriptivo que identifica el certificado que se va a usar. Si no se asigna ningún nombre descriptivo al certificado, esta función debe devolver el nombre del firmante del certificado.GetPfxPassword()
debe devolver la contraseña necesaria para abrir el almacén de certificados (o una cadena vacía si no se requiere ninguna contraseña).
Un proveedor de certificados que implementa la
ICertificateProvider
interfaz:GetCertificate()
debe construir un objeto de certificado y devolverlo llamandoCertificateReceived()
a en el objeto de devolución de llamada.
Implementación de un validador de autenticación
Los validadores de autenticación reciben el token de autenticación enviado por el cliente y responden con el resultado de validación.
Implemente la interfaz de la IAuthenticationReceiver
siguiente manera:
GetRealm()
debe devolver el nombre del dominio de autenticación (un dominio HTTP usado durante el protocolo de enlace de conexión remota).ValidateToken()
debe validar el token de autenticación de cliente y llamarValidationCompleted()
a en el objeto de devolución de llamada con el resultado de validación.
Implementación de un proveedor de autenticación
Los proveedores de autenticación generan o recuperan el token de autenticación que se enviará al servidor.
Implemente la interfaz de la IAuthenticationProvider
siguiente manera:
GetToken()
debe generar o recuperar el token de autenticación que se va a enviar. Una vez que el token esté listo, llame alTokenReceived()
método en el objeto de devolución de llamada.
Implementación de un validador de certificados
Los validadores de certificados reciben la cadena de certificados enviada por el servidor y determinan si el servidor puede ser de confianza.
Para validar certificados, puede usar la lógica de validación del sistema subyacente. Esta validación del sistema puede admitir su propia lógica de validación o reemplazarla por completo. Si no pasa su propio validador de certificado al solicitar una conexión segura, la validación del sistema se usará automáticamente.
En Windows, la validación del sistema comprobará lo siguiente:
- Integridad de la cadena de certificados: los certificados forman una cadena coherente que termina en un certificado raíz de confianza.
- Validez del certificado: el certificado del servidor está dentro de su intervalo de tiempo de validez y se emite para la autenticación del servidor.
- Revocación: el certificado no se ha revocado
- Coincidencia de nombre: el nombre de host del servidor coincide con uno de los nombres de host para los que se emitió el certificado.
Implemente la interfaz de la ICertificateValidator
siguiente manera:
PerformSystemValidation()
debe devolvertrue
si se debe realizar una validación del sistema como se ha descrito anteriormente. En este caso, el resultado de validación del sistema se pasa como entrada alValidateCertificate()
método .ValidateCertificate()
debe validar la cadena de certificados y, a continuación, llamar aCertificateValidated()
en la devolución de llamada pasada con el resultado de validación final. Este método acepta la cadena de certificados, el nombre del servidor con el que se establece la conexión y si se debe forzar una comprobación de revocación. Si la cadena de certificados contiene varios certificados, el primero es el certificado del firmante.
Nota
Si el caso de uso requiere una forma diferente de validación (consulte el caso de uso del certificado n.º 1 anterior), omita la validación del sistema por completo. En su lugar, use cualquier API o biblioteca que pueda controlar los certificados X.509 codificados en DER para descodificar la cadena de certificados y realizar las comprobaciones necesarias para su caso de uso.