2016-01-18 97 views
1

我正在嘗試驗證有證書交換的客戶端。我遇到的問題是openssl客戶端拒絕連接嘗試,因爲身份驗證握手中不包含任何證書頒發機構。SSLStream在服務器身份驗證上設置可信證書頒發機構

這似乎對在Windows Server 2008 R2上運行的實例正常工作,但在我的兩個開發環境(Windows 10和Windows 7)中都失敗了。我看過並試圖更改幾個窗口設置(主要是本地組策略),這可能會阻止添加證書頒發機構,但無法正常工作。

是LocalCertificateSelectionCallback的字符串數組acceptableIssuers字段的函數嗎?

我還發現另一個stackoverflow php solution是相關的,但不知道如何將它應用到sslstream類。

我的代碼看起來像這樣

var _nwStream = new SslStream(client.GetStream(), true, 
(sender, certificate, chain, sslPolicyErrors) => 
{ 
    bool policyErrs = (sslPolicyErrors & (SslPolicyErrors.RemoteCertificateChainErrors | SslPolicyErrors.RemoteCertificateNotAvailable)) != 0; 
    if (policyErrs) 
    { 
    string message = string.Format("Remote Certificate failed for client: {0}, SSL policy errors {1}", client.Client.RemoteEndPoint, sslPolicyErrors); 
    return !policyErrs; 
}, 
(sender, targetHost, localCertificates, remoteCertificate, acceptableIssuers) => 
{ 
    acceptableIssuers = new string[] { _cert.Issuer }; 
    return _cert; 
}); 

_nwStream.AuthenticateAsServer(_cert, true, System.Security.Authentication.SslProtocols.Tls, true); 

任何幫助將是很大的appreciated-謝謝!

回答

0

我不知道爲什麼它沒有早點出現。有一個在 HKEY_LOCAL_MACHINE \系統\ CurrentControlSet註冊表項\控制\ SecurityProviders \ SCHANNEL 稱爲SendTrustedIssuerList其設置爲0,將其更改爲1解決了這個問題。此標誌在Windows Server實例上可能默認設置爲1。

相關問題