我将 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。
关于可能是什么问题的任何线索?谢谢。