OpenSSL验证返回代码:20(无法获取本地颁发者证书)
我正在运行Windows Vista,并试图通过https连接以多部分形式上载文件,但我在本地颁发者证书方面遇到一些问题。我只是想弄清楚为什么这个现在不起作用,然后在这个问题解决后再回到我的cURL代码。我正在运行命令:OpenSSL验证返回代码:20(无法获取本地颁发者证书),openssl,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 c
openssl s_client -connect connect_to_site.com:443
它给了我一个VeriSign,Inc.的数字证书,但也抛出了一个错误:
Verify return code: 20 (unable to get local issuer certificate)
什么是本地颁发者证书?那是我自己电脑的证书吗?有办法解决这个问题吗?我尝试过使用-CAfile mozilla.pem文件,但仍然出现相同的错误。您的服务器是否配置了客户端身份验证?如果是这样,您需要在与服务器连接时传递客户端证书。您的服务器是否配置了客户端身份验证?如果是这样的话,您需要在与服务器连接时传递客户端证书。我也遇到了同样的问题,并通过向存储CA密钥的目录传递路径解决了这个问题。在Ubuntu上:
openssl s_client -CApath /etc/ssl/certs/ -connect address.com:443
我也遇到了同样的问题,并通过将路径传递到存储CA密钥的目录来解决它。在Ubuntu上:
openssl s_client -CApath /etc/ssl/certs/ -connect address.com:443
我在Macports的OSX OpenSSL 1.0.1i上也遇到了同样的问题,还必须指定CApath作为解决方法(正如Ubuntu bug报告中提到的,即使是无效的CApath也会使OpenSSL出现在默认目录中)。
有趣的是,使用PHP的openssl函数(如PHPMailer 5中使用的)连接到同一台服务器效果很好。我在Macports的OSX openssl 1.0.1i上也遇到了同样的问题,并且还必须将CApath指定为一种解决方法(如Ubuntu错误报告中所述,即使是无效的CApath也会使openssl出现在默认目录中)。
有趣的是,使用PHP的openssl函数(在phpMail 5中使用)连接到同一台服务器效果很好。客户端身份验证:
openssl s_client -cert ./client-cert.pem -key ./client-key.key -CApath /etc/ssl/certs/ -connect foo.example.com:443
使用客户端身份验证:
openssl s_client -cert ./client-cert.pem -key ./client-key.key -CApath /etc/ssl/certs/ -connect foo.example.com:443
如果使用带有
keyUsage
的自签名证书时缺少值keyCertSign
也会发生此错误如果使用带有keyUsage
的自签名证书时缺少值keyCertSign解决方案:
必须显式地将参数-CAfile添加到ca文件.pem
注意:我还尝试了另一个答案中提到的param-CApath
,但它对我不起作用
说明:
错误无法获取本地颁发者证书
意味着openssl
不知道您的根CA证书
注意:如果您有具有更多域的web服务器,请不要忘记同时添加-servername.domain.net
参数。此参数将“在ClientHello中设置TLS扩展服务器名”。如果没有此参数,响应将始终包含默认SSL证书(而不是与您的域匹配的证书)。解决方案:
必须显式地将参数-CAfile添加到ca文件.pem
注意:我还尝试了另一个答案中提到的param-CApath
,但它对我不起作用
说明:
错误无法获取本地颁发者证书
意味着openssl
不知道您的根CA证书
注意:如果您有具有更多域的web服务器,请不要忘记同时添加-servername.domain.net
参数。此参数将“在ClientHello中设置TLS扩展服务器名”。如果没有此参数,响应将始终包含默认的SSL证书(而不是与您的域匹配的证书)。我遇到了同样的问题,
它在证书中保留颁发者主题值后得到固定,因为它是颁发者证书的主题
因此,请检查“证书中的发卡机构主体值(cert.pem)=发卡机构主体(CA.pem)”
openssl验证-CAfile CA.pem cert.pem
cert.pem:好的
我也面临同样的问题,
它在证书中保留颁发者主题值后得到固定,因为它是颁发者证书的主题
因此,请检查“证书中的发卡机构主体值(cert.pem)=发卡机构主体(CA.pem)”
openssl验证-CAfile CA.pem cert.pem
cert.pem:好的
将CA和根证书放入/usr/share/CA证书或/usr/local/share/CA证书中。
然后
dpkg重新配置ca证书
甚至可以使用apt get重新安装ca证书包
完成此操作后,您的证书将被收集到系统的数据库中:
/etc/ssl/certs/ca-certificates.crt
然后一切都会好起来。将您的CA和根证书放在/usr/share/CA certificate或/usr/local/share/CA certificate中。
然后
dpkg重新配置ca证书
甚至可以使用apt get重新安装ca证书包
完成此操作后,您的证书将被收集到系统的数据库中:
/etc/ssl/certs/ca-certificates.crt
然后一切正常。使用中间ca和根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:好的
部署certific使用中间ca和根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:好的
部署certific此错误消息意味着
CABundle不是由(-CAfile…)给出的
或
自签名根证书未关闭CABundle文件
别担心。与服务器的连接甚至可以正常工作
您从openssl s_客户端收到消息。。。
(假设您没有犯其他错误)此错误消息表示
CABundle不是由(-CAfile…)给出的
或
自签名根证书未关闭CABundle文件
别担心。与服务器的连接甚至可以正常工作
您从openssl s_客户端收到消息。。。
(假设你没有犯其他错误)这个问题在中讨论过。非常感谢!