Bezpieczne połączenie z usługą Holographic Remoting i interfejsem API Windows Mixed Reality API

Pamiętaj, że jeśli chcesz włączyć zabezpieczenia połączeń, musisz zaimplementować niestandardowe aplikacje zdalne i odtwarzacza. Możesz użyć podanych przykładów jako punktów początkowych dla własnych aplikacji.

Aby włączyć zabezpieczenia, wywołaj ListenSecure() zamiast Listen(), a ConnectSecure()Connect() nie w celu nawiązania połączenia komunikacji zdalnej.

Te wywołania wymagają zapewnienia implementacji niektórych interfejsów w celu dostarczania i sprawdzania poprawności informacji związanych z zabezpieczeniami:

  • Serwer musi zaimplementować dostawcę certyfikatów i program sprawdzania ważności uwierzytelniania
  • Klient musi zaimplementować dostawcę uwierzytelniania i program sprawdzania ważności certyfikatu.

Wszystkie interfejsy mają funkcję z żądaniem podjęcia akcji, która odbiera obiekt wywołania zwrotnego jako parametr. Przy użyciu tego obiektu można łatwo zaimplementować asynchroniczną obsługę żądania. Zachowaj odwołanie do tego obiektu i wywołaj funkcję uzupełniania po zakończeniu akcji asynchronicznej. Funkcja uzupełniania może być wywoływana z dowolnego wątku.

Porada

Implementację interfejsów WinRT można łatwo wykonać przy użyciu języka C++/WinRT. W rozdziale Tworzenie interfejsów API w języku C++/WinRT opisano to szczegółowo.

Ważne

Plik build\native\include\HolographicAppRemoting\Microsoft.Holographic.AppRemoting.idl wewnątrz pakietu NuGet zawiera szczegółową dokumentację interfejsu API dotyczącą bezpiecznych połączeń.

Implementowanie dostawcy certyfikatów

Dostawcy certyfikatów dostarczają aplikacji serwera z certyfikatem do użycia. Implementacja składa się z dwóch części:

  1. Obiekt certyfikatu, który implementuje ICertificate interfejs:

    • GetCertificatePfx() powinien zwrócić zawartość binarną magazynu PKCS#12 certyfikatów. Plik .pfx zawiera dane PKCS#12 , więc jego zawartość może być używana bezpośrednio w tym miejscu.
    • GetSubjectName() powinna zwrócić przyjazną nazwę identyfikującą certyfikat do użycia. Jeśli do certyfikatu nie przypisano przyjaznej nazwy, ta funkcja powinna zwrócić nazwę podmiotu certyfikatu.
    • GetPfxPassword() powinien zwrócić hasło wymagane do otwarcia magazynu certyfikatów (lub pusty ciąg, jeśli hasło nie jest wymagane).
  2. Dostawca certyfikatów implementując interfejs ICertificateProvider :

    • GetCertificate() należy skonstruować obiekt certyfikatu i zwrócić go przez wywołanie CertificateReceived() wywołania zwrotnego obiektu .

Implementowanie sprawdzania ważności uwierzytelniania

Weryfikacje uwierzytelniania odbierają token uwierzytelniania wysłany przez klienta i odpowiadają z wynikiem weryfikacji.

Zaim implementuj IAuthenticationReceiver interfejs w następujący sposób:

  • GetRealm() Powinien zwrócić nazwę domeny uwierzytelniania (domeny HTTP używane podczas komunikacji zdalnej połączenia uściślić).
  • ValidateToken() należy sprawdzić poprawność tokenu uwierzytelniania klienta i wywołać ValidationCompleted() metodę w obiekcie wywołania zwrotnego z wynikiem weryfikacji.

Implementowanie dostawcy uwierzytelniania

Dostawcy uwierzytelniania generują lub pobierają token uwierzytelniania do wysłania do serwera.

Zaim implementuj IAuthenticationProvider interfejs w następujący sposób:

  • GetToken() powinien generować lub pobierać token uwierzytelniania do wysłania. Gdy token będzie gotowy, wywołaj metodę TokenReceived() dla obiektu wywołania zwrotnego.

Implementowanie validatora certyfikatów

Program sprawdzania certyfikatów odbiera łańcuch certyfikatów wysłany przez serwer i określa, czy serwer może być zaufany.

Aby zweryfikować certyfikaty, można użyć logiki weryfikacji bazowego systemu. Ta weryfikacja systemu może obsługiwać własną logikę weryfikacji lub całkowicie ją zastąpić. Jeśli nie przekażemy własnego weryfikacji certyfikatu podczas żądania bezpiecznego połączenia, zostanie automatycznie użyta walidacja systemu.

Na Windows sprawdzanie poprawności systemu będzie sprawdzać, czy:

  • Integralność łańcucha certyfikatów: certyfikaty tworzą spójny łańcuch, który kończy się zaufanym certyfikatem głównym
  • Ważność certyfikatu: certyfikat serwera jest w okresie ważności i jest wystawiany do uwierzytelniania serwera
  • Odwołanie: certyfikat nie został odwołany
  • Dopasowanie nazwy: nazwa hosta serwera jest dopasowana do jednej z nazw hostów, dla których wystawiono certyfikat

Zaim implementuj ICertificateValidator interfejs w następujący sposób:

  • PerformSystemValidation() powinien zwrócić , true jeśli należy wykonać weryfikację systemu zgodnie z powyższym opisem. W takim przypadku wynik weryfikacji systemu jest przekazywany jako dane wejściowe do ValidateCertificate() metody .
  • ValidateCertificate() należy zweryfikować łańcuch certyfikatów, a następnie wywołać dla CertificateValidated() przekazanego wywołania zwrotnego końcowy wynik weryfikacji. Ta metoda akceptuje łańcuch certyfikatów, nazwę serwera, z którym jest nawiązane połączenie, oraz to, czy należy wymusić sprawdzanie odwołania. Jeśli łańcuch certyfikatów zawiera wiele certyfikatów, pierwszy z nich jest certyfikatem podmiotu.

Uwaga

Jeśli Twój przypadek użycia wymaga innej formy weryfikacji (zobacz przypadek użycia certyfikatu nr 1 powyżej), całkowicie pomiń weryfikację systemu. Zamiast tego należy użyć dowolnego interfejsu API lub biblioteki, które mogą obsługiwać certyfikaty X.509 zakodowane w formacie DER, aby zdekodować łańcuch certyfikatów i przeprowadzić kontrole wymagane dla twojego przypadku użycia.

Zobacz też