【问题标题】:How to use openssl to verify a certificate just like a browser?如何像浏览器一样使用openssl验证证书?
【发布时间】:2012-10-13 13:30:13
【问题描述】:

我正在使用 openssl 来验证证书,但似乎在一种情况下,即使浏览器认为证书有效,它也无法验证证书。

openssl s_client -connect test.uk.example.com:443 + sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' depth=0 /C=GB/ST=CB/L=Cambridge/O=acme Systems Inc./OU=Development Operations acme/CN=acme.com/CN=*.acme.com/CN=*.uk.acme .com/CN=*.acme.com/CN=*.vmd.acme.com/CN=*.acme.net/CN=*.eng.acme.net 验证错误:num=20:无法获取本地颁发者证书 验证返回:1 depth=0 /C=GB/ST=CB/L=Cambridge/O=acme Systems Inc./OU=Development Operations acme/CN=acme.com/CN=*.acme.com/CN=*.uk.acme .com/CN=*.acme.com/CN=*.vmd.acme.com/CN=*.acme.net/CN=*.eng.acme.net 验证错误:num=27:证书不受信任 验证返回:1 depth=0 /C=GB/ST=CB/L=Cambridge/O=acme Systems Inc./OU=Development Operations acme/CN=acme.com/CN=*.acme.com/CN=*.uk.acme .com/CN=*.acme.com/CN=*.vmd.acme.com/CN=*.acme.net/CN=*.eng.acme.net 验证错误:num=21:无法验证第一个证书 验证返回:1

浏览器正确验证了相同的证书。

我应该如何调用 oepnssl 以确保验证通过?

【问题讨论】:

    标签: ssl openssl certificate


    【解决方案1】:

    最可能的原因是 OpenSSL 尚未配置或找不到用于验证证书路径的信任锚列表。

    您可以使用-CApath-CAfile 显式传递它们。

    【讨论】:

    • 你说得对,你还能提供一个脚本化的解决方案来安装这些证书吗?
    • 如果您的操作系统没有预定义列表,一种方法是使用从 Firefox 中提取列表的 Curl 脚本:curl.haxx.se/docs/caextract.html
    • 我试过openssl s_client -connect $REMHOST:$REMPORT -CAfile cacert.pem,但我得到了同样的错误。 (cacert.pem 是从您发布的链接中获取的文件)
    • 从您的问题中很难知道您发布的 DN 是否是虚拟的。您可能正在使用您自己的内部 CA 颁发的证书。无论如何,在您的示例中显然使用了非标准的 CN。您还可以使用 this SSL checker 检查完整的服务器配置。
    • @sorin 对于大多数平台,您还可以尝试openssl version -d 返回的路径的certs 子目录。也就是说,为您的openssl s_client 命令提供选项-CApath $(openssl version -d | awk -F'"' '{ print $2 }')/certs。 Cygwin 和 Ubuntu 至少在那里有一组可用的公共 CA 证书。我记得这些不再由 OpenSSL 本身提供,因此这些 CA 证书作为指向平台提供的证书存储库的符号链接提供。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多