为什么不能识别自签名的SSL证书?

我将PEM文件复制到/ usr / local / share / ca-certificates /中,然后运行update-ca-certificates,并validation所得到的证书现在包含在/etc/ssl/certs/ca-certificates.crt中由curl-config –ca打印的文件。 我也证实openssl s_client -connect example.com:443所打印的证书与我的PEM文件是一样的。 但是我仍然继续得到“错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书validation失败”消息。 即使我使用curl的–cacert选项(如http://curl.haxx.se/docs/sslcerts.html中所述)来告诉它使用哪个证书,也会发生这种情况。

如果我使用curl -k完全禁用了证书validation,但是我不想这样做,因为我正在尝试编写一个testing工具来testingSSL。

如果我在lynx中访问相同的URL,它通常会抱怨,如果有任何SSL错误,它工作正常。 但是我不能仅仅使用Lynx来testing这个testing工具,除非我能find一些方法让Tornado的AsyncHTTPClient使用Lynx而不是libcurl。 安装自签名证书似乎没有任何意义,满足Lynx而不是curl。

我在使用Vagrant的VirtualBox中使用Ubuntu 12.04 LTS; 它curl7.22.0。 SSL终结代理是在同一台机器上运行的nginx / 1.3.13,域名通过/ etc / hosts中的条目指向127.0.0.1。

任何线索可能是什么问题? 谢谢。

当我们使用cURL检索未使用CA签名证书的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安装使用的目录。

 root@ubuntu:~# openssl version -d OPENSSLDIR: "/usr/lib/ssl" 

第2步
切换到该目录并列出目录内容。 你应该看到一个名为“certs”的目录。

 root@ubuntu:~# cd /usr/lib/ssl && ls -al 

第3步
切换到该目录。

 root@ubuntu:/usr/lib/ssl# cd certs 

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

步骤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 )并保存。

最后一步:

执行程序update-ca-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网站上进行卷曲测试,现在就可以运行。

资源