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

标签 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 但不满足 curl 似乎没有任何意义。

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

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

最佳答案

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

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 简单地克服这个问题。选项,有一个更安全和持久的解决方案,即:

第一步
确定您的OpenSSL 是哪个目录安装用途。
openssl version -d
OPENSSLDIR: "/usr/lib/ssl"

第二步
切换到该目录并列出目录内容。您应该会看到一个名为 certs 的目录。 .
cd /usr/lib/ssl && ls -al

第三步
切换到那个目录。
cd certs

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

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

第五步
更改为 /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

关于curl - 为什么 curl 不能识别自签名 SSL 证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17597457/

相关文章:

nginx - 使用 UWSGI 和 NGINX 服务 Pyramid 应用程序

performance - Nginx 性能问题

azure - 如何关闭 Azure API 管理策略上的 SSL 验证?

node.js - 从nodejs中的请求模块调用时,github搜索api没有给出结果

javascript - 使用 $.Ajax 调用 UBER api

curl - 使用cURL登录POST表单

c++ - Qt : Accessing Secure Objects using session-id from a server

php - 使用 PHP、Composer、NPM 通过 WSL 设置 LEMP 的网络问题

ssl - 错误代码 : SEC_ERROR_BAD_SIGNATURE installed SSL Certificate on Tomcat

ajax - Javascript 从 https 服务器获取请求到本地主机 :port with self signed SSL