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.

Um die Sicherheit zu aktivieren, rufen Sie ListenSecure() anstelle von Listen()ConnectSecure() und anstelle von Connect() auf, um die Remotingverbindung herzustellen.

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

  • Der Server muss einen Zertifikatanbieter und eine Authentifizierungsüberprüfung implementieren.
  • Der Client muss einen Authentifizierungsanbieter und einen Zertifikatüberprüfungsanbieter implementieren.

Alle Schnittstellen verfügen über eine Funktion, die Sie zum Ergreifen einer Aktion auffordert, die ein Rückrufobjekt als Parameter empfängt. Mit diesem Objekt können Sie ganz einfach die asynchrone Behandlung 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. Das Kapitel Autor-APIs mit C++/WinRT beschreibt dies ausführlich.

Wichtig

Das build\native\include\HolographicAppRemoting\Microsoft.Holographic.AppRemoting.idl im NuGet-Paket enthaltene ausführliche Dokumentation für die API im Zusammenhang mit sicheren Verbindungen.

Implementieren eines Zertifikatanbieters

Zertifikatanbieter stellen die Serveranwendung mit dem zu verwendenden 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 hier direkt 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 durch Aufrufen CertificateReceived() des Rückrufobjekts zurückgeben.

Implementieren einer Authentifizierungsüberprüfung

Authentifizierungsvalidatoren empfangen das vom Client gesendete Authentifizierungstoken und antworten mit dem Validierungsergebnis zurück.

Implementieren Sie die IAuthenticationReceiver Schnittstelle wie folgt:

  • GetRealm() sollte den Namen des Authentifizierungsbereichs zurückgeben (ein HTTP-Bereich, der während des Remotingverbindungs-Handshake verwendet wird).
  • ValidateToken() sollte das Clientauthentifizierungstoken überprüfen und 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 Zertifikatüberprüfungsators

Zertifikat validatoren empfangen die vom Server gesendete Zertifikatkette und bestimmen, ob der Server vertrauenswürdig ist.

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 ganz ersetzen. Wenn Sie beim Anfordern einer sicheren Verbindung keinen eigenen Zertifikatvalidator übergeben, wird die Systemvalidierung automatisch verwendet.

Unter Windows überprüft die Systemüberprüfung Folgendes:

  • Integrität der Zertifikatkette: Die Zertifikate bilden eine konsistente Kette, die auf einem vertrauenswürdigen Stammzertifikat endet
  • Zertifikatgültigkeit: Das Zertifikat des Servers befindet sich innerhalb seiner Gültigkeitsdauer und wird für die Serverauthentifizierung ausgestellt.
  • Widerruf: Das Zertifikat wurde nicht widerrufen
  • Namensgleich: Der Hostname des Servers entspricht einem der Hostnamen, für die das Zertifikat ausgestellt wurde.

Implementieren Sie die ICertificateValidator Schnittstelle wie folgt:

  • PerformSystemValidation() sollte zurückgegeben true werden, wenn eine Systemvalidierung wie oben beschrieben durchgeführt werden soll. In diesem Fall wird das Ergebnis der Systemüberprüfung als Eingabe an die ValidateCertificate() -Methode übergeben.
  • ValidateCertificate() sollte die Zertifikatkette überprüfen und dann 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 Zertifikatanwendungsfall #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