为什么我需要-CApath让OpenSSL使用我的证书?

时间:2014-05-08 22:57:51

标签: openssl ssl-certificate

我遇到了一个我收到错误消息的问题:

Download error on https://pypi.python.org/simple/: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:598) -- Some packages may not be found!

这是我自己的OpenSSL自定义编译。但是,我的网络浏览器很好地信任这个网站。

我已经尝试过<openssldir>/certs/并将证书放在那里,然后运行一个小的BASH脚本,为每个人创建<hash>.0格式的符号链接。我已经在几个地方读到这是它应该如何工作

for f in *.pem
do
  ln -s "$f" `openssl x509 -hash -noout -in "$f"`.0
done

我有点能让它运转起来......当我跑步时:

openssl s_client -showcerts -connect pypi.python.org:443 -CApath .

我得到(截断)

Start Time: 1399590981
Timeout   : 300 (sec)
Verify return code: 0 (ok)

但是,当我跑:

openssl s_client -showcerts -connect pypi.python.org:443

我明白了:

Start Time: 1399591046
Timeout   : 300 (sec)
Verify return code: 20 (unable to get local issuer certificate)

为什么只有当我指定-CApath?

默认情况下如何让它使用?

1 个答案:

答案 0 :(得分:4)

使用此命令验证证书来自的公司:

openssl s_client -connect pypi.python.org:443

结果:

depth=1 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert High Assurance CA-3
verify error:num=20:unable to get local issuer certificate

你没有根证书...然后从下载DigiCertAssuredIDRootCA.crt: https://www.digicert.com/digicert-root-certificates.htm

并将其与-CAfile

一起使用
openssl s_client -connect pypi.python.org:443 -CAfile DigiCertAssuredIDRootCA.crt 

现在有效!