1

我正在尝试连接到配置为通过 SSL 客户端证书对用户进行身份验证的 Web 服务(不受我控制)。我有一个包含客户端证书和相关私钥的 PKCS12 格式的有效证书。该证书由 Web 服务提供商接受的 CA 颁发。

安装证书并尝试在各种浏览器中访问受限区域会产生以下结果:

  • IE6 - 工作正常,我可以检索 WSDL

  • IE7 - 提示输入证书,但随后因来自服务器的 403.7 而失败

  • Firefox3 - 设置为询问,但没有提示并且失败并出现 403.7

  • Safari 4 - 证书已安装在钥匙串中,但没有提示和 403.7

此外,尝试以编程方式 (Java) 访问 Web 服务失败,并出现相同的 403.7 错误代码。

奇怪的是,这在 IE6 中有效,但在其他浏览器中无效,我错过了什么?我是否需要在 PKCS12 文件中包含完整的 CA 证书链?

任何帮助将不胜感激。

4

2 回答 2

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”的命令。

于 2011-07-12T14:23:01.903 回答
1

好的,得到这个工作。答案是肯定的,我确实需要在 PKCS12 文件中包含所有中间 CA 证书。我将所有中间 CA 证书加上文件“chain.pem”中的根 CA 证书连接起来,然后执行以下命令:

openssl pkcs12 -export -chain -CAfile chain.pem -in cert.pem -inkey key.pem -out cert.p12
于 2009-10-08T00:07:48.383 回答