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

Sil*_*own 20 curl nginx self-signed ssl-certificate

我将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而不是curl似乎没有任何意义.

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

关于可能出现什么问题的任何线索?谢谢.

Ped*_*ito 22

如果我们用于cURL检索HTTPS未使用CA签名证书的站点,则会出现以下问题:

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
Run Code Online (Sandbox Code Playgroud)

虽然我们可以使用该-k选项简单地克服这个问题,但是有一个更安全和持久的解决方案,即:

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

openssl version -d
OPENSSLDIR: "/usr/lib/ssl"
Run Code Online (Sandbox Code Playgroud)

步骤2
切换到该目录并列出目录内容.您应该看到一个名为的目录certs.

cd /usr/lib/ssl && ls -al
Run Code Online (Sandbox Code Playgroud)

步骤3
切换到该目录.

cd certs
Run Code Online (Sandbox Code Playgroud)

列出目录内容.您应该从符号链接中看到证书实际存储在其中/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
Run Code Online (Sandbox Code Playgroud)

添加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.
Run Code Online (Sandbox Code Playgroud)

在目标HTTPS站点上使用curl进行测试,它现在应该可以正常工作.

资源