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

bry*_*mon 61 openssl

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

openssl s_client -connect connect_to_site.com:443
Run Code Online (Sandbox Code Playgroud)

它给了我VeriSign公司的数字证书,但也发出错误:

Verify return code: 20 (unable to get local issuer certificate)
Run Code Online (Sandbox Code Playgroud)

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

Jan*_*bel 90

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

openssl s_client -CApath /etc/ssl/certs/ -connect address.com:443
Run Code Online (Sandbox Code Playgroud)

  • 您还可以将路径设置为`/ dev/null`,让您的客户端在所有常用位置中搜索证书. (3认同)
  • 请注意,此路径通常由包“ca-certificates”填充。 (2认同)

Mar*_*tin 7

解决方案: 您必须显式添加参数-CAfile your-ca-file.pem.

注意:我也试过-CApath在另一个答案中提到的param ,但是对我来说不起作用.

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


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


Con*_*ado 6

如果您使用keyUsage缺少值的自签名证书,也会发生此错误keyCertSign.

  • 我花了几个小时来追踪这个。谢谢! (2认同)

Siv*_*ran 3

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