为什么不会卷曲识别自签名SSL证书?

时间:2013-07-11 15:26:12

标签: curl nginx ssl-certificate self-signed

我将PEM文件复制到/ usr / local / share / ca-certificates /并运行了update-ca-certificates,我验证了生成的证书现在包含在/ etc / ssl / certs / ca-certificates中。 crt是curl-config --ca打印的文件。我还验证了openssl s_client -connect example.com:443打印的证书与我的PEM文件相同。然而,我继续得到“错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败”消息。即使我使用http://curl.haxx.se/docs/sslcerts.html中描述的curl -cacert选项告诉它使用什么证书,也会发生这种情况。

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

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

我在Vagrant驱动的VirtualBox中使用Ubuntu 12.04 LTS;它有卷曲7.22.0。 SSL终止代理是在同一台机器上运行的nginx / 1.3.13,域名由/ etc / hosts中的条目指向127.0.0.1。

可能出现问题的任何线索?感谢。

1 个答案:

答案 0 :(得分:20)

如果我们使用cURL来检索未使用CA-signed certificateHTTPS网站,则会出现以下问题:

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-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站点上使用curl进行测试,它现在可以正常工作。

Source