2013-04-15 49 views
1

我與許多人報告過的客戶端證書有相同的問題,但是我看到的解決方案都不適用於我。我有一個我在VB.Net中編寫的客戶端(使用VS 2010和.Net Framework 4.0),需要連接到運行在Apache Tomcat/5.0.27上的Web服務。當客戶端證書不是必需的時候,它可以正常工作,但是一旦客戶端證書被要求,它就會失敗,並且「請求已經中止:不能創建SSL/TLS安全通道」無法創建SSL/TLS安全通道:客戶端證書,TomCat和.Net

使用Internet Explorer ,9和10,在XP和Win7x32上),啓用SSL(通過在system.xml文件中設置sslProtocol =「TLS」secure =「true」scheme =「https」在Tomcat上配置),但客戶端證書被禁用clientAuth =「false」),在CA證書和服務器證書安裝在客戶端PC上後,IE很高興。 (IE會在沒有證書的情況下投訴,但是您可以告訴它忽略該警告。證書安裝後,它會連接而不會有任何警告。)當需要客戶端證書時(clientAuth =「true」),IE將不會連接。在導入客戶端證書文件後,它仍然無法連接。 IE顯示客戶端文件已安裝,並且顯示證書正常,並且它信任CA,但它顯示的似乎是錯誤的存儲:中間證書頒發機構和客戶端身份驗證在「用途」下未打勾。 MMC證書管理單元顯示客戶端證書位於Personal - Current User存儲中。

該證書是由Web服務的所有者發給我們的,所以理論上它必須工作。屬性看起來不錯,目的是顯示「所有應用程序策略」。

我需要得到這個與我的.Net客戶端一起工作。我使用Web引用來創建到Web服務的連接。我設置了PreaAuthenticate = True,並將證書文件附加到Web引用,並可以在IDE中看到它。使用網絡監視器,我可以看到服務器向客戶端發送證書(以兩個大數據包),但客戶端似乎沒有發送任何回到服務器。

我嘗試了各種建議,例如設置ServicePointManager.Expect100Continue = true和 ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3,但這沒什麼區別。

我禁用了防火牆和代理服務器,所以沒有什麼東西應該阻止流量。

我很感激任何幫助。

回答

1

好吧,事實證明,他們提供的證書存在問題,或者它與客戶端不兼容。我找到了使用OpenSsl創建證書的說明,並且可以與他們的服務器一起使用。他們使用java的keytool來創建證書,所以它要麼創建一個不兼容的證書,要麼他們沒有使用正確的過程,我用OpenSsl的過程是正確的。

OpenSSL中的步驟是創建一個私有密鑰文件(client.key),創建證書請求(client.req),簽名的密鑰(client.pem),然後將其導出(client.pfx)。