Compartir a través de


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:

  1. Objeto de certificado, que implementa la ICertificate interfaz :

    • GetCertificatePfx() debe devolver el contenido binario de un PKCS#12 almacén de certificados. Un .pfx archivo contiene PKCS#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).
  2. Un proveedor de certificados que implementa la ICertificateProvider interfaz:

    • GetCertificate() debe construir un objeto de certificado y devolverlo llamando CertificateReceived() 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 llamar ValidationCompleted() 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 al TokenReceived() 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 devolver true 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 al ValidateCertificate() método .
  • ValidateCertificate() debe validar la cadena de certificados y, a continuación, llamar a CertificateValidated() 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.

Consulte también