Sichere Verbindung mit Holographic Remoting und der Windows Mixed Reality-API

Denken Sie daran, dass Sie benutzerdefinierte Remote- und Player-Apps implementieren müssen, wenn Sie die Verbindungssicherheit aktivieren möchten. Sie können die bereitgestellten Beispiele als Ausgangspunkte für Ihre eigenen Apps verwenden.

Rufen Sie zum Aktivieren der Sicherheit ListenSecure() anstelle von Listen()und ConnectSecure() anstelle von Connect() auf, um die Remotingverbindung herzustellen.

Für diese Aufrufe müssen Sie Implementierungen bestimmter Schnittstellen bereitstellen, um sicherheitsrelevante Informationen bereitzustellen und zu überprüfen:

  • Der Server muss einen Zertifikatanbieter und ein Authentifizierungsüberprüfungs-Validierungszeichen implementieren.
  • Der Client muss einen Authentifizierungsanbieter und ein Zertifikatsüberprüfungszeichen implementieren.

Alle Schnittstellen verfügen über eine Funktion, die Sie auffordert, Maßnahmen zu ergreifen, die ein Rückrufobjekt als Parameter empfängt. Mit diesem -Objekt können Sie problemlos eine asynchrone Verarbeitung der Anforderung implementieren. Behalten Sie einen Verweis auf dieses Objekt bei, und rufen Sie die Vervollständigungsfunktion auf, wenn die asynchrone Aktion abgeschlossen ist. Die Vervollständigungsfunktion kann von einem beliebigen Thread aufgerufen werden.

Tipp

Die Implementierung von WinRT-Schnittstellen kann problemlos mit C++/WinRT erfolgen. Dies wird im Kapitel Erstellen von APIs mit C++/WinRT ausführlich beschrieben.

Wichtig

Die build\native\include\HolographicAppRemoting\Microsoft.Holographic.AppRemoting.idl im NuGet Paket enthält eine ausführliche Dokumentation für die API im Zusammenhang mit sicheren Verbindungen.

Implementieren eines Zertifikatanbieters

Zertifikatanbieter stellen der Serveranwendung das zu verwendende Zertifikat bereit. Die Implementierung besteht aus zwei Teilen:

  1. Ein Zertifikatobjekt, das die ICertificate -Schnittstelle implementiert:

    • GetCertificatePfx() sollte den binären Inhalt eines PKCS#12 Zertifikatspeichers zurückgeben. Eine .pfx Datei enthält PKCS#12 Daten, sodass ihr Inhalt direkt hier verwendet werden kann.
    • GetSubjectName() sollte den Anzeigenamen zurückgeben, der das zu verwendende Zertifikat identifiziert. Wenn dem Zertifikat kein Anzeigename zugewiesen ist, sollte diese Funktion den Antragstellernamen des Zertifikats zurückgeben.
    • GetPfxPassword() sollte das Kennwort zurückgeben, das zum Öffnen des Zertifikatspeichers erforderlich ist (oder eine leere Zeichenfolge, wenn kein Kennwort erforderlich ist).
  2. Ein Zertifikatanbieter, der die ICertificateProvider Schnittstelle implementiert:

    • GetCertificate() sollte ein Zertifikatobjekt erstellen und zurückgeben, indem für das Rückrufobjekt aufgerufen CertificateReceived() wird.

Implementieren eines Validierungsüberprüfungszeichens für die Authentifizierung

Authentifizierungsvalidierungen empfangen das vom Client gesendete Authentifizierungstoken und antworten mit dem Validierungsergebnis.

Implementieren Sie die IAuthenticationReceiver -Schnittstelle wie folgt:

  • GetRealm() sollte den Namen des Authentifizierungsbereichs zurückgeben (ein HTTP-Bereich, der während des Remotingverbindungshandshakes verwendet wird).
  • ValidateToken() sollte das Clientauthentifizierungstoken überprüfen und für das Rückrufobjekt mit dem Validierungsergebnis aufrufen ValidationCompleted() .

Implementieren eines Authentifizierungsanbieters

Authentifizierungsanbieter generieren oder rufen das Authentifizierungstoken ab, das an den Server gesendet werden soll.

Implementieren Sie die IAuthenticationProvider -Schnittstelle wie folgt:

  • GetToken() sollte das zu sendende Authentifizierungstoken generieren oder abrufen. Sobald das Token bereit ist, rufen Sie die TokenReceived() -Methode für das Rückrufobjekt auf.

Implementieren eines Zertifikatsprüfzeichens

Zertifikatsprüfer empfangen die vom Server gesendete Zertifikatkette und bestimmen, ob der Server als vertrauenswürdig eingestuft werden kann.

Zum Überprüfen von Zertifikaten können Sie die Validierungslogik des zugrunde liegenden Systems verwenden. Diese Systemvalidierung kann entweder Ihre eigene Validierungslogik unterstützen oder vollständig ersetzen. Wenn Sie beim Anfordern einer sicheren Verbindung kein eigenes Zertifikatsvalidierungszeichen übergeben, wird die Systemvalidierung automatisch verwendet.

Auf Windows überprüft die Systemvalidierung Folgendes:

  • Integrität der Zertifikatkette: Die Zertifikate bilden eine konsistente Kette, die auf einem vertrauenswürdigen Stammzertifikat endet.
  • Gültigkeit des Zertifikats: Das Zertifikat des Servers liegt innerhalb des Gültigkeitszeitraums und wird für die Serverauthentifizierung ausgestellt.
  • Sperrung: Das Zertifikat wurde nicht widerrufen.
  • Namensgleiche: Der Hostname des Servers stimmt mit einem der Hostnamen überein, für die das Zertifikat ausgestellt wurde.

Implementieren Sie die ICertificateValidator -Schnittstelle wie folgt:

  • PerformSystemValidation() sollte zurückgeben true , wenn eine Wie oben beschriebene Systemvalidierung durchgeführt werden soll. In diesem Fall wird das Systemvalidierungsergebnis als Eingabe an die ValidateCertificate() Methode übergeben.
  • ValidateCertificate() sollte die Zertifikatkette überprüfen und dann für den übergebenen Rückruf mit dem endgültigen Validierungsergebnis aufrufen CertificateValidated() . Diese Methode akzeptiert die Zertifikatkette, den Namen des Servers, mit dem die Verbindung hergestellt wird, und ob eine Sperrprüfung erzwungen werden soll. Wenn die Zertifikatkette mehrere Zertifikate enthält, ist das erste Zertifikat das Antragstellerzertifikat.

Hinweis

Wenn Ihr Anwendungsfall eine andere Form der Validierung erfordert (siehe Zertifikatsnutzungsfall 1 oben), umgehen Sie die Systemvalidierung vollständig. Verwenden Sie stattdessen eine beliebige API oder Bibliothek, die DER-codierte X.509-Zertifikate verarbeiten kann, um die Zertifikatkette zu decodieren und die für Ihren Anwendungsfall erforderlichen Überprüfungen durchzuführen.

Weitere Informationen