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:
Obiekt certyfikatu, który implementuje
ICertificate
interfejs:GetCertificatePfx()
powinien zwrócić zawartość binarną magazynuPKCS#12
certyfikatów. Plik.pfx
zawiera danePKCS#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).
Dostawca certyfikatów implementując interfejs
ICertificateProvider
:GetCertificate()
należy skonstruować obiekt certyfikatu i zwrócić go przez wywołanieCertificateReceived()
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 doValidateCertificate()
metody .ValidateCertificate()
należy zweryfikować łańcuch certyfikatów, a następnie wywołać dlaCertificateValidated()
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.