Säker anslutning med Holographic Remoting och WINDOWS MIXED REALITY-API:et
Kom ihåg att du måste implementera anpassade fjärr- och spelarappar om du vill aktivera anslutningssäkerhet. Du kan använda de angivna exemplen som utgångspunkt för dina egna appar.
Om du vill aktivera säkerhet anropar ListenSecure()
du i stället för Listen()
och ConnectSecure()
i stället Connect()
för att upprätta fjärrkommunikationsanslutningen.
Dessa anrop kräver att du tillhandahåller implementeringar av vissa gränssnitt för att tillhandahålla och verifiera säkerhetsrelaterad information:
- Servern måste implementera en certifikatprovider och en autentiseringsverifierare
- Klienten måste implementera en autentiseringsprovider och en certifikatverifierare.
Alla gränssnitt har en funktion som begär att du vidtar åtgärder, som tar emot ett återanropsobjekt som parameter. Med det här objektet kan du enkelt implementera asynkron hantering av begäran. Behåll en referens till det här objektet och anropa slutförandefunktionen när den asynkrona åtgärden är klar. Slutförandefunktionen kan anropas från valfri tråd.
Tips
Det är enkelt att implementera WinRT-gränssnitt med C++/WinRT. I kapitlet Författare-API:er med C++/WinRT beskrivs detta i detalj.
Viktigt
I build\native\include\HolographicAppRemoting\Microsoft.Holographic.AppRemoting.idl
NuGet-paketet finns detaljerad dokumentation för API:et om säkra anslutningar.
Implementera en certifikatprovider
Certifikatprovidrar tillhandahåller serverprogrammet med det certifikat som ska användas. Implementeringen består av två delar:
Ett certifikatobjekt som implementerar
ICertificate
gränssnittet:GetCertificatePfx()
ska returnera det binära innehållet i ettPKCS#12
certifikatarkiv. En.pfx
fil innehållerPKCS#12
data, så dess innehåll kan användas direkt här.GetSubjectName()
ska returnera det eget namn som identifierar certifikatet som ska användas. Om inget eget namn har tilldelats certifikatet ska den här funktionen returnera certifikatets ämnesnamn.GetPfxPassword()
ska returnera lösenordet som krävs för att öppna certifikatarkivet (eller en tom sträng om inget lösenord krävs).
En certifikatprovider som implementerar
ICertificateProvider
gränssnittet:GetCertificate()
ska skapa ett certifikatobjekt och returnera det genom att anropaCertificateReceived()
på motringningsobjektet.
Implementera en autentiseringsverifierare
Autentiseringsverifierare tar emot den autentiseringstoken som skickas av klienten och svarar tillbaka med valideringsresultatet.
Implementera gränssnittet på IAuthenticationReceiver
följande sätt:
GetRealm()
ska returnera namnet på autentiseringssfären (en HTTP-sfär som används under handskakningen för fjärranslutning).ValidateToken()
ska validera klientautentiseringstoken och anropaValidationCompleted()
motringningsobjektet med valideringsresultatet.
Implementera en autentiseringsprovider
Autentiseringsprovidrar genererar eller hämtar den autentiseringstoken som ska skickas till servern.
Implementera gränssnittet på IAuthenticationProvider
följande sätt:
GetToken()
ska generera eller hämta den autentiseringstoken som ska skickas. När token är klar anroparTokenReceived()
du metoden för återanropsobjektet.
Implementera en certifikatverifierare
Certifikatverifierare tar emot certifikatkedjan som skickas av servern och avgör om servern kan vara betrodd.
Om du vill verifiera certifikat kan du använda valideringslogik för det underliggande systemet. Den här systemvalideringen kan antingen stödja din egen valideringslogik eller ersätta den helt och hållet. Om du inte skickar en egen certifikatverifierare när du begär en säker anslutning används systemvalidering automatiskt.
I Windows söker systemverifieringen efter:
- Integritet för certifikatkedjan: certifikaten bildar en konsekvent kedja som slutar med ett betrott rotcertifikat
- Certifikatets giltighet: serverns certifikat är inom dess giltighetstidsintervall och utfärdas för serverautentisering
- Återkallande: Certifikatet har inte återkallats
- Namnmatchning: Serverns värdnamn matchar ett av värdnamnen som certifikatet utfärdades för
Implementera gränssnittet på ICertificateValidator
följande sätt:
PerformSystemValidation()
ska returnerastrue
om en systemvalidering enligt beskrivningen ovan ska utföras. I det här fallet skickas systemvalideringsresultatet som indata tillValidateCertificate()
metoden.ValidateCertificate()
ska verifiera certifikatkedjan och sedan anropaCertificateValidated()
det skickade återanropet med det slutliga valideringsresultatet. Den här metoden accepterar certifikatkedjan, namnet på servern som anslutningen upprättas med och om en återkallningskontroll ska tvingas. Om certifikatkedjan innehåller flera certifikat är den första certifikatmottagaren.
Anteckning
Om ditt användningsfall kräver en annan typ av validering (se certifikatanvändningsfall nr 1 ovan) kringgår du systemvalidering helt. Använd i stället alla API:er eller bibliotek som kan hantera DER-kodade X.509-certifikat för att avkoda certifikatkedjan och utföra de kontroller som behövs för ditt användningsfall.