使用全像攝影遠端和 Windows Mixed Reality API 保護連線
請記住,如果您想要啟用連線安全性,則必須實作自訂遠端和播放機應用程式。 您可以使用提供的範例作為您自己應用程式的起點。
若要啟用安全性,請呼叫 ListenSecure()
而不是 Listen()
, 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 或程式庫來解碼憑證鏈結,並執行您的使用案例所需的檢查。