我正在运行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文件,但仍然给我同样的错误。
答案 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消息... (假设您也没有犯其他错误)