我正在尝试连接到配置为通过SSL客户端证书对用户进行身份验证的Web服务(不受我的控制)。我有一个PKCS12格式的有效证书,包含客户端证书和相关的私钥。证书由Web服务提供商接受的CA颁发。
安装证书并尝试在各种浏览器中访问受限区域会产生以下结果:
IE6 - 工作正常,我可以检索WSDL
IE7 - 提示输入证书但随后失败并显示服务器中的403.7
Firefox3 - 设置为询问,但没有提示并失败并显示403.7
Safari 4 - 证书安装在钥匙串中,但没有提示和403.7
此外,尝试以编程方式(Java)访问Web服务失败,并显示相同的403.7错误代码。
奇怪,这在IE6中有效,但在其他浏览器中,我错过了什么?我是否需要在PKCS12文件中包含完整的CA证书链?
非常感谢任何帮助。
答案 0 :(得分:2)
这确实有效!如果您对-inkey和-in选项感到困惑,它们是来自p12文件的私钥和证书。您可以使用以下命令将p12文件转换为pem格式:
openssl pkcs12 -in file.p12 -clcerts -out file.pem
并仅使用上述命令“-in file.pem”。
此外,您可以将根CA证书导入受信任的证书存储区,以下是如何执行此操作的说明:http://gagravarr.org/writing/openssl-certs/others.shtml#ca-openssl,然后您不必手动复制证书。安装证书后,使用上面的命令而不使用“-CAfile chain.pem”。
答案 1 :(得分:1)
好的,搞定了。答案是肯定的,我确实需要在PKCS12文件中包含所有中间CA证书。我将所有中间CA证书加上文件“chain.pem”中的根CA证书连接起来,然后执行以下命令:
openssl pkcs12 -export -chain -CAfile chain.pem -in cert.pem -inkey key.pem -out cert.p12