OpenSSLvalidation返回码:20(无法获得本地签发者证书)

我正在运行Windows Vista,并试图通过https连接以多部分forms上传文件,但我在本地发行者证书有一些麻烦。 我只是想弄清楚为什么这个工作现在还没有开始,并且在解决这个问题后再回到我的cURL代码。 我运行命令:

openssl s_client -connect connect_to_site.com:443 

它给了我一个来自VeriSign,Inc.的数字证书,但也发现了一个错误:

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

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

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

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

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

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

解决scheme:您必须明确添加参数-CAfile your-ca-file.pem

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

说明: unable to get local issuer certificate错误意味着openssl不知道您的根CA证书。


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

你的服务器是否configuration了客户端authentication? 如果是这样,则需要在与服务器连接时传递客户端证书。

我面临同样的问题,因为它是发行人证书的主体,所以在将发行人的主体价值保留在证书之后得到了修正。

所以请在证书(cert.pem)==发行者的主题(CA.pem)中检查“发行者主题值”

opensslvalidation-CAfile CA.pem cert.pem
cert.pem:好的

使用客户端authentication:

 openssl s_client -cert ./client-cert.pem -key ./client-key.key -CApath /etc/ssl/certs/ -connect foo.example.com:443 

将您的CA和根证书放入/ usr / share / ca-certificate或/ usr / local / share / ca-certificate。 然后

dpkg-reconfigure ca-certificates

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

完成后,您的证书将被收集到系统的数据库:/etc/ssl/certs/ca-certificates.crt中

那么一切都应该没问题。