使用全像攝影遠端處理和 Windows Mixed Reality API 的安全連線
請記住,如果您想要啟用連線安全性,就必須實作自定義遠端和播放機應用程式。 您可以使用提供的範例作為您自己應用程式的起點。
若要啟用安全性,請呼叫 ,而不是Listen()
呼叫 ListenSecure()
,ConnectSecure()
而不是 Connect()
建立遠端連線。
這些呼叫需要您提供特定介面的實作,以提供和驗證安全性相關信息:
- 伺服器必須實作憑證提供者和驗證驗證程式
- 用戶端必須實作驗證提供者和憑證驗證程式。
所有介面都有函式,要求您採取動作,以接收回呼對象作為參數。 使用此物件,您可以輕鬆地實作要求的異步處理。 保留這個對象的參考,並在異步動作完成時呼叫完成函式。 您可以從任何線程呼叫完成函式。
提示
您可以使用 C++/WinRT 輕鬆地實作 WinRT 介面。 使用 C++/WinRT 撰寫 API 一章會詳細說明這一點。
重要事項
build\native\include\HolographicAppRemoting\Microsoft.Holographic.AppRemoting.idl
NuGet 套件內的 包含與安全連線相關的 API 詳細檔。
實作憑證提供者
憑證提供者為伺服器應用程式提供要使用的憑證。 實作包含兩個部分:
實作 介面的
ICertificate
憑證物件:-
GetCertificatePfx()
應該會傳回證書存儲的PKCS#12
二進位內容。.pfx
檔案包含PKCS#12
數據,因此其內容可以直接在這裡使用。 -
GetSubjectName()
應該傳回識別要使用之憑證的易記名稱。 如果未將易記名稱指派給憑證,此函式應該會傳回憑證的主體名稱。 -
GetPfxPassword()
應該傳回開啟證書存儲 (所需的密碼,如果不需要密碼,則應該傳回空字串) 。
-
實作 介面的
ICertificateProvider
憑證提供者:-
GetCertificate()
應該建構憑證物件,並在回呼物件上呼叫CertificateReceived()
來傳回它。
-
實作驗證驗證程式
驗證驗證程式會接收用戶端所傳送的驗證令牌,並以驗證結果回復。
實作 介面, IAuthenticationReceiver
如下所示:
-
GetRealm()
應該傳回驗證領域名稱, (遠端連線交握) 期間使用的 HTTP 領域。 -
ValidateToken()
應該驗證客戶端驗證令牌,並使用驗證結果呼叫ValidationCompleted()
回呼物件。
實作驗證提供者
驗證提供者會產生或擷取要傳送至伺服器的驗證令牌。
實作 介面, IAuthenticationProvider
如下所示:
-
GetToken()
應該產生或擷取要傳送的驗證令牌。 一旦令牌就緒,請在回呼物件上呼叫TokenReceived()
方法。
實作憑證驗證程式
憑證驗證程式會接收伺服器所傳送的憑證鏈結,並判斷是否可以信任伺服器。
若要驗證憑證,您可以使用基礎系統的驗證邏輯。 此系統驗證可以支援您自己的驗證邏輯,或完全取代它。 如果您在要求安全連線時未傳遞自己的憑證驗證程式,系統驗證將會自動使用。
在 Windows 上,系統驗證會檢查下列專案:
- 憑證鏈結的完整性:憑證會形成以受信任跟證書結尾的一致鏈結
- 憑證有效性:伺服器的憑證在其有效時間範圍內,且會針對伺服器驗證發出
- 撤銷:憑證尚未撤銷
- 名稱比對:伺服器的主機名符合憑證簽發的其中一個主機名
實作 介面, ICertificateValidator
如下所示:
-
PerformSystemValidation()
如果應執行如上所述的系統驗證,則應該傳回true
。 在此情況下,系統驗證結果會傳遞為 方法的ValidateCertificate()
輸入。 -
ValidateCertificate()
應該驗證憑證鏈結,然後以CertificateValidated()
最終驗證結果呼叫傳遞的回呼。 這個方法會接受憑證鏈結、要建立連線的伺服器名稱,以及是否應該強制撤銷檢查。 如果憑證鏈結包含多個憑證,則第一個憑證是主體憑證。
注意事項
如果您的使用案例需要不同形式的驗證 (請參閱上述憑證使用案例 #1) ,請完全略過系統驗證。 請改用任何可以處理 DER 編碼 X.509 憑證的 API 或連結庫來譯碼憑證鏈結,並執行使用案例所需的檢查。