Curl 为什么赢了';无法识别自签名SSL证书?

Curl 为什么赢了';无法识别自签名SSL证书?,curl,nginx,ssl-certificate,self-signed,Curl,Nginx,Ssl Certificate,Self Signed,我将PEM文件复制到/usr/local/share/ca certificates/并运行了更新ca证书,我验证了生成的证书现在包含在/etc/ssl/certs/ca-certificates.crt中,该文件是由curl config--ca打印的。我还验证了由openssl s_client-connect example.com:443打印的证书与我的PEM文件相同。但我仍然收到“error:14090086:SSL例程:SSL3_get_SERVER_CERTIFICATE:CERT

我将PEM文件复制到/usr/local/share/ca certificates/并运行了更新ca证书,我验证了生成的证书现在包含在/etc/ssl/certs/ca-certificates.crt中,该文件是由curl config--ca打印的。我还验证了由openssl s_client-connect example.com:443打印的证书与我的PEM文件相同。但我仍然收到“error:14090086:SSL例程:SSL3_get_SERVER_CERTIFICATE:CERTIFICATE verify failed”消息。即使我使用curl的--cacert选项(如中所述)来告诉它要使用什么证书,也会发生这种情况

如果我使用curl-k完全禁用证书验证,它就可以工作,但我不想这样做,因为我正在尝试编写一个测试工具,该工具应该能够正确地测试SSL

如果我在lynx中访问相同的URL,它可以正常工作,如果有任何SSL错误,它通常会抱怨。但我不能只使用Lynx进行测试,除非我能找到某种方法让Tornado的AsyncHTTPClient使用Lynx而不是libcurl。安装自签名证书满足Lynx而不满足curl似乎没有任何意义

我在一个流浪者驱动的VirtualBox中使用Ubuntu12.04 LTS;它的旋度为7.22.0。SSL终止代理是在同一台机器上运行的nginx/1.3.13,域名通过/etc/hosts中的条目指向127.0.0.1

有什么问题的线索吗?谢谢。

如果我们使用检索未使用的
HTTPS
站点,则会出现以下问题:

curl https://example.selfip.com
curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
More details here: http://curl.haxx.se/docs/sslcerts.html
虽然我们可以使用
-k
选项简单地克服这一问题,但有一个更安全、持久的解决方案,即:

步骤1
确定您的
OpenSSL
安装使用的目录

openssl version -d
OPENSSLDIR: "/usr/lib/ssl"
步骤2
更改到该目录并列出目录内容。您应该看到一个名为
certs
的目录

cd /usr/lib/ssl && ls -al
步骤3
换到那个目录

cd certs
列出目录内容。您应该从符号链接中看到证书实际上存储在
/usr/share/ca证书中

步骤4
更改到
/usr/share/ca certificates
目录,并在那里添加您的自签名证书(例如:your.cert.name.crt)

步骤5
更改到
/etc
目录并编辑文件
ca certificates.conf

root@ubuntu:# cd /etc
root@ubuntu:# nano ca-certificates.conf
your.cert.name.crt
添加到文件(
ca certificates.conf
)并保存它

最后一步:

执行程序
updateCA certificates–fresh

注意:您可能希望在执行命令之前备份
/etc/ssl/certs

root@ubuntu:# update-ca-certificates --fresh
Clearing symlinks in /etc/ssl/certs...done.
Updating certificates in /etc/ssl/certs....done.
Running hooks in /etc/ca-certificates/update.d....done.
在您的目标HTTPS站点上使用curl进行测试,现在应该可以工作了


Centos:安装ca证书包:
yum安装ca证书
启用动态ca配置功能:
update ca trust force Enable
将其作为新文件添加到/etc/pki/ca trust/source/anchors/:
cp foo.crt/etc/pki/ca trust/source/anchors/
使用命令:
更新ca trust extract
(谢谢)就我而言,我还必须将
example.com
添加到
/etc/hosts
。在这里发布了答案: