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:

  1. Ett certifikatobjekt som implementerar ICertificate gränssnittet:

    • GetCertificatePfx() ska returnera det binära innehållet i ett PKCS#12 certifikatarkiv. En .pfx fil innehåller PKCS#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).
  2. En certifikatprovider som implementerar ICertificateProvider gränssnittet:

    • GetCertificate() ska skapa ett certifikatobjekt och returnera det genom att anropa CertificateReceived() 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 anropa ValidationCompleted() 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 anropar TokenReceived() 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 returneras true om en systemvalidering enligt beskrivningen ovan ska utföras. I det här fallet skickas systemvalideringsresultatet som indata till ValidateCertificate() metoden.
  • ValidateCertificate() ska verifiera certifikatkedjan och sedan anropa CertificateValidated() 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.

Se även