我遇到了许多人报告的客户端证书问题,但我见过的解决方案都没有对我有用。我有一个我在VB.Net中编写的客户端(使用VS 2010和.Net framework 4.0),需要连接到在Apache Tomcat / 5.0.27上运行的Web服务。当不需要客户端证书时,它可以正常使用SSL,但是一旦需要客户端证书,它就会失败,并且“请求已被中止:不能创建SSL / TLS安全通道”
使用Internet Explorer(8,9和10,在XP和Win7x32上)进行测试,启用SSL时(通过在系统中设置sslProtocol =“TLS”secure =“true”scheme =“https”在Tomcat上配置)。 xml文件),但客户端证书被禁用(clientAuth =“false”),IE在客户端PC上安装CA证书和服务器证书后很高兴。 (IE会在没有证书的情况下进行投诉,但您可以告诉它忽略警告。安装证书时,它会连接而不会发出任何警告。)当需要客户端证书(clientAuth =“true”)时,IE将无法连接。导入客户端证书文件后,它仍然无法连接。 IE显示客户端文件已安装,它显示证书正常并且它信任CA,但它在似乎是错误的存储中显示它:中间证书颁发机构,并且客户端身份验证未在目的下勾选。 MMC证书管理单元显示客户端证书位于“个人 - 当前用户”存储区中。
证书是由Web服务的所有者发给我们的,所以理论上它必须工作。这些属性看起来不错,目的显示“所有应用程序策略”。
我需要让这个与我的.Net客户端一起工作。我使用Web引用来创建与Web服务的连接。我设置PreaAuthenticate = True,并将证书文件附加到Web引用,并可以在IDE中看到它附加。使用网络监视器,我可以看到服务器将证书发送到客户端(在两个大数据包中),但客户端似乎没有发送回服务器。
我尝试了各种建议,例如:设置ServicePointManager.Expect100Continue = true和 ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3,但这没什么区别。
我已禁用防火墙和代理服务器,因此不应阻止流量。
我很感激任何帮助。
答案 0 :(得分:1)
好的,事实证明他们提供的证书存在问题,或者它与客户端不兼容。我找到了使用OpenSsl创建证书的说明,它可以与他们的服务器一起使用。他们使用java的keytool来制作证书,因此要么创建不兼容的证书,要么他们没有使用正确的程序,我使用的OpenSsl程序是正确的。
OpenSsl中的步骤是创建私钥文件(client.key),创建证书请求(client.req),签署密钥(client.pem)然后导出它(client.pfx)。