2017-03-09 79 views
0

是否可以使用證書鏈連接到客戶端作爲服務器?SslStream.AuthenticateAsServer證書鏈

clientStream.AuthenticateAsServerAsync(certificate, false, System.Security.Authentication.SslProtocols.Tls, false).Wait(); 

我只是嘗試連接到自簽名證書鏈的客戶端,並沒有運氣。 SslStream實例的方法AuthenticateAsServer只有一個證書作爲參數。但瀏覽器請求additional root certificate。 你有任何想法或代碼示例它是如何做到的?

回答

0

鏈不發送根,因爲A)你已經擁有了它,所以它對你的根存儲是多餘的;或者B)你不這樣做,在這種情況下你不會相信它,所以爲什麼要麻煩?

RFC 5246, section 7.4.2

certificate_list: 這是證書的序列(鏈)。發件人的 證書必須排在第一位。以下每個 證書都必須直接證明其前面的證書。因爲 證書驗證要求根密鑰獨立分發 ,所以指定根證書頒發機構 證書頒發機構的自簽名證書可以從鏈中省略,假設該遠程終端必須已經擁有它,以便 驗證它任何狀況之下。

SslStream類將發送服務器身份證書,後面跟隨它所知道的任何中間體,但不發送根(除非服務器身份證書是自簽名的)。

通常情況下,不受信任的根可以通過他們寫入其子/中間CA的頒發機構信息訪問記錄查找。如果您沒有AIA或端點無法訪問,則必須通過不同的機制將根傳輸到客戶端計算機。