2012-07-13 118 views
5

我有一個完全可操作的系統,其中基於openssl的客戶端與openssl服務器交互。每個客戶都有自己的證書,並由服務器驗證。使用openssl(X509,pem)生成了證書。他們是自簽名的。SslStream客戶端無法與stunnel服務器完成握手

我現在想寫一個基於SslStream的測試客戶端。我使用了SslStream類documentation中的客戶端示例。

我的SslStream客戶端無法完成握手。 stunnel抱怨客戶沒有發送證書。這在Wireshark中證實(握手消息中的證書長度:0)。

我的客戶端顯示以下異常:

內部異常:接收到的消息是意外或嚴重 格式化

這是我如何加載我的證書:

X509Certificate cert = new X509Certificate2(filename, password); 
X509CertificateCollection certColl = new X509CertificateCollection(); 
certColl.Add(cert); 

我嘗試檢索證書的各種屬性(例如:GetSerialNumberString())。有用。 Verify方法返回false。這是我要調查的下一件事。

如何設置我的SslStream似乎並不重要(相同的結果):

sslStream.AuthenticateAsClient(serverName); 

SslStream sslStream = new SslStream(
    client.GetStream(), 
    false, 
    new RemoteCertificateValidationCallback(ValidateServerCertificate), 
    new LocalCertificateSelectionCallback(SelectLocalCertificate)); 

同樣的,認證:

sslStream.AuthenticateAsClient(serverName); 

sslStream.AuthenticateAsClient(serverName, 
    certColl, 
    SslProtocols.Tls, 
    true); 

SelectLocalCertificate被調用(兩次),並返回我的證書。 ValidateServerCertificate目前從來沒有被召喚(令我驚訝)。

我該如何調試?如果你能指出我的問題更好。

UPDATE

我添加了一個函數基於所述X509Chain example從文檔以執行鏈驗證。它顯示各種信息的保證書上,其中包括兩個耐人尋味的消息:

Element certificate is valid: False 
Element error status length: 1 

最後,我真的沒有比我打電話覈實更多細節。

openssl verify cert.pem的輸出不報告任何異常。

error 18 at 0 depth lookup:self signed certificate 
OK 

UPDATE

我提取從PEM私有密鑰和證書,以及我生成cert.pfx(PKCS12)。我在個人密鑰存儲中導入cert.pfx時沒有問題。在我的證書詳細信息中,我可以看到一個指示附加私鑰的小圖標。

我修改了我的客戶端以從我的個人存儲中檢索證書。但我得到了同樣的失敗。

+0

對於SSL客戶端驗證,您需要證書和密鑰。您應該檢查PEM文件是否包含這兩個文件,否則您缺少一個重要部分。 – Robert 2012-07-13 17:09:57

+0

PEM包含---- ---- BEGIN CERTIFICATE -----塊下的證書和----- BEGIN RSA PRIVATE KEY -----塊下的私鑰。 – 2012-07-13 18:17:12

回答

4

解決的辦法是在Windows機器上導入我的CA根證書。我的客戶現在可以完成握手了!

通過搜索更完整的SslStream示例找到解決方案。感謝http://geekswithblogs.net/luskan/archive/2007/10/01/115758.aspx

+0

必須將根CA證書安裝在Trusted Authorities文件夾中的Windows應用商店中,並且還必須從Windows應用商店加載客戶端證書,但從文件加載客戶端證書時不起作用。因此客戶端和服務器根CA必須位於Windows存儲中。謝謝 – AlexandruC 2014-03-18 17:41:36

+0

如果Windows/.NET不在證書存儲區中,則不允許您使用私鑰。這是設計。 – 2014-08-08 07:48:11

相關問題