Delen via


Beveiligde verbinding met externe communicatie van Holographic en de Windows Mixed Reality-API

Houd er rekening mee dat u aangepaste externe en speler-apps moet implementeren als u verbindingsbeveiliging wilt inschakelen. U kunt de opgegeven voorbeelden gebruiken als uitgangspunt voor uw eigen apps.

Als u beveiliging wilt inschakelen, roept ListenSecure() u aan in plaats van Listen(), en ConnectSecure() in plaats van Connect() om de externe verbinding tot stand te brengen.

Voor deze aanroepen moet u implementaties van bepaalde interfaces opgeven voor het verstrekken en valideren van beveiligingsgerelateerde informatie:

  • De server moet een certificaatprovider en een verificatievalidator implementeren
  • De client moet een verificatieprovider en een certificaatvalidator implementeren.

Alle interfaces hebben een functie die u vraagt actie te ondernemen, die een callback-object als parameter ontvangt. Met dit object kunt u eenvoudig asynchrone afhandeling van de aanvraag implementeren. Behoud een verwijzing naar dit object en roep de voltooiingsfunctie aan wanneer de asynchrone actie is voltooid. De voltooiingsfunctie kan worden aangeroepen vanuit elke thread.

Tip

Het implementeren van WinRT-interfaces kan eenvoudig worden uitgevoerd met C++/WinRT. In het hoofdstuk Author API's with C++/WinRT (API's maken met C++/WinRT ) wordt dit in detail beschreven.

Belangrijk

De build\native\include\HolographicAppRemoting\Microsoft.Holographic.AppRemoting.idl in het NuGet-pakket bevat gedetailleerde documentatie voor de API met betrekking tot beveiligde verbindingen.

Een certificaatprovider implementeren

Certificaatproviders leveren het te gebruiken certificaat aan de servertoepassing. De implementatie bestaat uit twee onderdelen:

  1. Een certificaatobject, waarmee de ICertificate interface wordt geïmplementeerd:

    • GetCertificatePfx() moet de binaire inhoud van een PKCS#12 certificaatarchief retourneren. Een .pfx bestand bevat PKCS#12 gegevens, zodat de inhoud rechtstreeks hier kan worden gebruikt.
    • GetSubjectName() moet de beschrijvende naam retourneren die het certificaat aangeeft dat moet worden gebruikt. Als er geen beschrijvende naam is toegewezen aan het certificaat, moet deze functie de onderwerpnaam van het certificaat retourneren.
    • GetPfxPassword() moet het wachtwoord retourneren dat is vereist om het certificaatarchief te openen (of een lege tekenreeks als er geen wachtwoord is vereist).
  2. Een certificaatprovider die de ICertificateProvider interface implementeert:

    • GetCertificate() moet een certificaatobject maken en dit retourneren door het aan te roepen CertificateReceived() op het callback-object.

Een verificatievalidator implementeren

Verificatievalidators ontvangen het verificatietoken dat door de client is verzonden en beantwoorden met het validatieresultaat.

Implementeer de IAuthenticationReceiver interface als volgt:

  • GetRealm() moet de naam van de verificatierealm retourneren (een HTTP-realm die wordt gebruikt tijdens de handshake van de externe verbinding).
  • ValidateToken() moet het clientverificatietoken valideren en het callback-object aanroepen ValidationCompleted() met het validatieresultaat.

Een verificatieprovider implementeren

Verificatieproviders genereren of halen het verificatietoken op dat naar de server moet worden verzonden.

Implementeer de IAuthenticationProvider interface als volgt:

  • GetToken() moet het verificatietoken genereren of ophalen dat moet worden verzonden. Zodra het token gereed is, roept u de TokenReceived() methode aan voor het callback-object.

Een certificaatvalidator implementeren

Certificaatvalidators ontvangen de certificaatketen die door de server is verzonden en bepalen of de server kan worden vertrouwd.

Als u certificaten wilt valideren, kunt u de validatielogica van het onderliggende systeem gebruiken. Deze systeemvalidatie kan uw eigen validatielogica ondersteunen of helemaal vervangen. Als u uw eigen certificaatvalidator niet doorgeeft wanneer u een beveiligde verbinding aanvraagt, wordt systeemvalidatie automatisch gebruikt.

In Windows controleert de systeemvalidatie op:

  • Integriteit van de certificaatketen: de certificaten vormen een consistente keten die eindigt op een vertrouwd basiscertificaat
  • Geldigheid van certificaat: het certificaat van de server valt binnen de geldigheidsperiode en wordt uitgegeven voor serververificatie
  • Intrekking: het certificaat is niet ingetrokken
  • Naamovereenkomst: de hostnaam van de server komt overeen met een van de hostnamen waarvoor het certificaat is uitgegeven

Implementeer de ICertificateValidator interface als volgt:

  • PerformSystemValidation() moet retourneren true als een systeemvalidatie zoals hierboven beschreven moet worden uitgevoerd. In dit geval wordt het resultaat van de systeemvalidatie als invoer doorgegeven aan de ValidateCertificate() methode.
  • ValidateCertificate() moet de certificaatketen valideren en vervolgens de doorgegeven callback aanroepen CertificateValidated() met het uiteindelijke validatieresultaat. Deze methode accepteert de certificaatketen, de naam van de server waarmee de verbinding tot stand wordt gebracht en of een intrekkingscontrole moet worden afgedwongen. Als de certificaatketen meerdere certificaten bevat, is het eerste certificaat het onderwerpcertificaat.

Notitie

Als voor uw use-case een andere vorm van validatie is vereist (zie certificaatgebruiksvoorbeeld 1 hierboven), kunt u de systeemvalidatie volledig overslaan. Gebruik in plaats daarvan elke API of bibliotheek die DER-gecodeerde X.509-certificaten kan verwerken om de certificaatketen te decoderen en de controles uit te voeren die nodig zijn voor uw use-case.

Zie ook