OpenSSL验证返回码:20(无法获得本地颁发者证书)

时间:2012-07-18 18:50:56

标签: openssl

我正在运行Windows Vista并尝试通过https连接以多部分形式上传文件,但我在使用本地颁发者证书时遇到了一些问题。我只是想弄清楚为什么它现在不起作用,并在此之后再回到我的cURL代码。我正在运行命令:

openssl s_client -connect connect_to_site.com:443

它为我提供了VeriSign,Inc。的数字证书,但也发出错误:

Verify return code: 20 (unable to get local issuer certificate)

本地发行人证书是什么?这是我自己电脑的证书吗?有没有解决的办法?我曾尝试使用-CAfile mozilla.pem文件,但仍然给我同样的错误。

10 个答案:

答案 0 :(得分:87)

我遇到了同样的问题,并通过将路径传递到存储CA密钥的目录来解决它。在Ubuntu上它是:

openssl s_client -CApath /etc/ssl/certs/ -connect address.com:443

答案 1 :(得分:7)

<强>解决方案: 您必须明确添加参数-CAfile your-ca-file.pem

注意:我也试过了另一个答案中提到的param -CApath,但这对我不起作用。

<强>说明: 错误unable to get local issuer certificate表示openssl不知道您的根CA证书。

注意:如果您拥有包含更多域名的网络服务器,请不要忘记添加-servername your.domain.net参数。此参数将“在ClientHello中设置TLS扩展名服务器名称”。如果没有此参数,响应将始终包含默认SSL证书(不是与您的域匹配的证书)。

答案 2 :(得分:5)

如果您使用{{1}}缺少值{{1}}的自签名证书,也会发生此错误。

答案 3 :(得分:3)

我在Macports的OSX OpenSSL 1.0.1i上遇到了同样的问题,并且还必须指定CApath作为解决方法(并且如Ubuntu错误报告中所述,即使无效 CApath也会使openssl查看默认目录)。  有趣的是,使用PHP的openssl函数(在PHPMailer 5中使用)连接到同一服务器工作正常。

答案 4 :(得分:2)

您的服务器是否配置了客户端身份验证?如果是这样,您需要在连接服务器时传递客户端证书。

答案 5 :(得分:2)

使用客户端身份验证:

{{1}}

答案 6 :(得分:2)

把你的CA&amp; / usr / share / ca-certificate或/ usr / local / share / ca-certificate中的根证书。 然后

dpkg-reconfigure ca-certificates

甚至用apt-get重新安装ca-certificate包。

执行此操作后,您的证书将被收集到系统的数据库中: /etc/ssl/certs/ca-certificates.crt

然后一切都会好起来的。

答案 7 :(得分:1)

我遇到了同样的问题, 在将证券中的发行人主题价值保留为发行人证书的主体后,它得到了修复。

所以请检查证书中的发行人主题价值(cert.pem)==发行人主体(CA.pem)“

  

openssl verify -CAfile CA.pem cert.pem
  cert.pem:好的

答案 8 :(得分:0)

使用中间和根ca创建证书链文件。

cat intermediate/certs/intermediate.cert.pem certs/ca.cert.pem > intermediate/certs/ca-chain.cert.pem

chmod 444 intermediate/certs/ca-chain.cert.pem

然后验证

openssl verify -CAfile intermediate/certs/ca-chain.cert.pem \
  intermediate/certs/www.example.com.cert.pem

www.example.com.cert.pem:确定 部署证书

答案 9 :(得分:0)

此错误消息表示 CABundle不是由(-CAfile ...)给定的   要么 自签名的根证书不会关闭CABundle文件。

不用担心。与服务器的连接甚至可以正常工作 您从openssl s_client获得theis消息... (假设您也没有犯其他错误)