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:
Een certificaatobject, waarmee de
ICertificate
interface wordt geïmplementeerd:GetCertificatePfx()
moet de binaire inhoud van eenPKCS#12
certificaatarchief retourneren. Een.pfx
bestand bevatPKCS#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).
Een certificaatprovider die de
ICertificateProvider
interface implementeert:GetCertificate()
moet een certificaatobject maken en dit retourneren door het aan te roepenCertificateReceived()
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 aanroepenValidationCompleted()
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 deTokenReceived()
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 retournerentrue
als een systeemvalidatie zoals hierboven beschreven moet worden uitgevoerd. In dit geval wordt het resultaat van de systeemvalidatie als invoer doorgegeven aan deValidateCertificate()
methode.ValidateCertificate()
moet de certificaatketen valideren en vervolgens de doorgegeven callback aanroepenCertificateValidated()
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.