Udostępnij za pośrednictwem


Zabezpieczanie połączenia za pomocą komunikacji wirtualnej holograficznej i interfejsu API Windows Mixed Reality

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

Aby włączyć zabezpieczenia, wywołaj metodę ListenSecure() zamiast Listen(), i ConnectSecure() zamiast Connect() ustanowić połączenie komunikacji wirtualnej.

Te wywołania wymagają zapewnienia implementacji niektórych interfejsów w celu zapewnienia i weryfikacji informacji związanych z zabezpieczeniami:

  • Serwer musi zaimplementować dostawcę certyfikatów i moduł sprawdzania poprawności uwierzytelniania
  • Klient musi zaimplementować dostawcę uwierzytelniania i moduł sprawdzania poprawności certyfikatu.

Wszystkie interfejsy mają funkcję żądającą podjęcia akcji, która odbiera obiekt wywołania zwrotnego jako parametr. Za pomocą 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

Implementowanie interfejsów WinRT można łatwo wykonać przy użyciu języka C++/WinRT. W rozdziale Author APIs with C++/WinRT (Tworzenie interfejsów API z językiem C++/WinRT ) szczegółowo opisano to.

Ważne

Wewnątrz build\native\include\HolographicAppRemoting\Microsoft.Holographic.AppRemoting.idl pakietu NuGet znajduje się szczegółowa dokumentacja interfejsu API związana z bezpiecznymi połączeniami.

Implementowanie dostawcy certyfikatów

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

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

    • GetCertificatePfx() powinna zwrócić zawartość binarną PKCS#12 magazynu certyfikatów. .pfx Plik zawiera PKCS#12 dane, więc jego zawartość może być używana bezpośrednio tutaj.
    • 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() Program powinien zwrócić hasło wymagane do otwarcia magazynu certyfikatów (lub pustego ciągu, jeśli hasło nie jest wymagane).
  2. Dostawca certyfikatów ICertificateProvider implementuje interfejs:

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

Implementowanie modułu sprawdzania poprawności uwierzytelniania

Moduły sprawdzania poprawności uwierzytelniania odbierają token uwierzytelniania wysyłany przez klienta i odpowiadają z powrotem z wynikiem weryfikacji.

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

  • GetRealm() powinna zwrócić nazwę obszaru uwierzytelniania (obszar HTTP używany podczas uzgadniania połączenia komunikacji wirtualnej).
  • ValidateToken() powinien zweryfikować token uwierzytelniania klienta i wywołać wywołanie ValidationCompleted() obiektu wywołania zwrotnego z wynikiem weryfikacji.

Implementowanie dostawcy uwierzytelniania

Dostawcy uwierzytelniania generują lub pobierają token uwierzytelniania, który ma zostać wysłany do serwera.

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

  • GetToken() powinien wygenerować lub pobrać token uwierzytelniania do wysłania. Gdy token będzie gotowy, wywołaj metodę TokenReceived() w obiekcie wywołania zwrotnego.

Implementowanie modułu sprawdzania poprawności certyfikatu

Moduły sprawdzania poprawności certyfikatów odbierają łańcuch certyfikatów wysyłany przez serwer i określają, czy serwer może być zaufany.

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

W systemie Windows sprawdzanie poprawności systemu:

  • Integralność łańcucha certyfikatów: certyfikaty tworzą spójny łańcuch kończący się zaufanym certyfikatem głównym
  • Ważność certyfikatu: certyfikat serwera mieści się w przedziale czasu ważności i jest wystawiany na potrzeby uwierzytelniania serwera
  • Odwołanie: certyfikat nie został odwołany
  • Dopasowanie nazwy: nazwa hosta serwera jest zgodna z jedną z nazw hostów, dla których wystawiono certyfikat

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

  • PerformSystemValidation() powinna zostać zwrócona 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() powinien zweryfikować łańcuch certyfikatów, a następnie wywołać CertificateValidated() wywołanie na przekazanym wywołaniu zwrotnym z ostatecznym wynikiem weryfikacji. Ta metoda akceptuje łańcuch certyfikatów, nazwę serwera, z który jest nawiązywane połączenie i czy należy wymusić sprawdzenie odwołania. Jeśli łańcuch certyfikatów zawiera wiele certyfikatów, pierwszym z nich jest certyfikat 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óra może obsługiwać certyfikaty X.509 zakodowane w formacie DER w celu dekodowania łańcucha certyfikatów i przeprowadzania kontroli wymaganych w danym przypadku użycia.

Zobacz też