Python SSL请求和Let的加密证书

Tha*_*son 9 python ssl openssl python-requests lets-encrypt

我现在正在努力让请求GET使用Let的加密证书对我的网站执行简单的请求.一切都很好的网站,我可以从Chrome访问它就好了.(我现在正在运行OSX El Capitan).

首先,我尝试GET向网站提出请求:

>>> import requests
>>> requests.get('https://example.com')
Run Code Online (Sandbox Code Playgroud)

这给了我:

requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)
Run Code Online (Sandbox Code Playgroud)

然后我尝试了各种各样的东西,包括获取Let的加密权限证书,以下openssl命令成功验证我的站点的证书:

> openssl s_client -CAfile ./letsencryptauthorityx1.pem -connect example.com:443
Run Code Online (Sandbox Code Playgroud)

其输出包括以下内容:

...
SSL-Session:
    Protocol  : TLSv1
    Cipher    : DHE-RSA-AES256-SHA
    Session-ID: ...
    Session-ID-ctx: 
    Master-Key: ...
    Key-Arg   : None
    Start Time: 1452865123
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---
Run Code Online (Sandbox Code Playgroud)

也许我在这里遗漏了一些东西,但它看起来好像我的网站已经根据我提供的Let's Encrypt授权证书进行了验证.所以,我很高兴地将我的Python代码更改为:

>>> requests.get('https://example.com', verify='./letsencryptauthorityx1.pem')
Run Code Online (Sandbox Code Playgroud)

但我仍然不断收到requests.exceptions.SSLError错误.我也尝试使用DER权威证书的格式,但后来我收到以下错误requests:

requests.exceptions.SSLError: unknown error (_ssl.c:2825)
Run Code Online (Sandbox Code Playgroud)

任何人都可以教我如何解决这个问题吗?

Pat*_*mée 5

听起来您的计算机上的CA CERTS不是最新的,或者未将Web服务器配置为为整个证书链提供服务器。