我有一个带有letsencrypt证书的python3 django网站
一切都很好,除了使用python请求对本地地址的请求:
response = requests.post('http://127.0.0.1:8100', data=data)
它有非常奇怪的行为:
有时我会得到200,但在supervisorctl restart mywebsite
之后它会抛出 SSLError
然后我做了:
response = requests.post('http://127.0.0.1:8100', data=data, verify=True)
一切都很好,直到我再次supervisorctl restart mywebsite
,它会抛出 SSLError O_o,现在只能用
response = requests.post('http://127.0.0.1:8100', data=data)
所以最终的工作代码是:
try:
response = requests.post('http://127.0.0.1:8100', data=data, verify=True)
except:
try:
response = requests.post('http://127.0.0.1:8100', data=data)
except:
response = requests.post('http://127.0.0.1:8100', data=data, verify=False)
显然这不是最好的计划)
建议的大问题
答案 0 :(得分:0)
您的网络应用最有可能发布从http://
到https://
的重定向。您可以通过查看带有curl -v
的响应标头来验证这一点。重定向后,由于使用localhost而不是域名,您可能会收到SSL错误:
您无法获得localhost的证书;证书颁发机构只能为公开可见的全局唯一域名颁发证书。 localhost不计算,并且不允许证书颁发机构为其颁发证书。 - https://community.letsencrypt.org/t/can-i-test-lets-encrypt-client-on-localhost/15627
编辑:
尝试使用https://
在verify=False
网址上执行初始请求。