python - SSL:CERTIFICATE_VERIFY_FAILED 尝试使用 django 验证 reCAPTCHA
问题描述
我得到一个
<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)>
当我尝试在我的 django 项目中验证验证码时。我就是这样做的:
recaptcha_response = request.POST.get('g-recaptcha-response')
print(recaptcha_response)
url = 'https://www.google.com/recaptcha/api/siteverify'
values = {
'secret': settings.CAPTCHA_SECRET_KEY,
'response': recaptcha_response
}
data = urllib.parse.urlencode(values).encode()
req = urllib.request.Request(url, data=data)
response = urllib.request.urlopen(req) # It fails here
result = json.loads(response.read().decode())
print(result)
该站点具有有效的证书,并且可以在本地运行。在日志中我得到这个:
请求方法:POST
请求网址: http: //prod.xxxx.com/evalua
这很奇怪,因为该网站在 https 中运行。它在kubernetes上,这可能是问题吗?我真的不知道问题是什么?我在 de recaptcha 管理控制台中正确设置了验证码。并且证书不是自动签名的。我使用让我们加密
解决方案
检查您如何为您的应用构建容器映像,以及其中是否包含非常旧的 CA 证书。您可以使用类似的东西ADD https://curl.haxx.se/ca/cacert.pem /etc/ssl/certs/cacert.pem
来确保您拥有最新的标准捆绑包。您还可以切换到请求和证书而不是 urllib,因为它嵌入了当前证书包的副本并确保它被使用。
推荐阅读
- python - Python - 用户输入 - 输入7位数字后自动启动功能
- reactjs - 在反应计时器应用程序组件中没有重新渲染
- docker - Docker Ubuntu 选择了错误的目录
- r - 如何匹配两个不同表的列中的值以提取 R 中第二个表的不同列中的对应值?
- node.js - 如何在 puppeteer 中设置多个自定义 HTTP 标头?
- javascript - 从 Eloquent JavaScript 变量循环一个三角形 (Eloquent JavaScript)
- amazon-web-services - AWS Lambda 获取输出队列
- javascript - node js迁移太慢了
- c# - 错误“数据库操作预计会影响 1 行,但实际上影响了 0 行。数据可能已被修改或删除..”
- ssh - 是否可以使用 Windows 的 PuTTY 客户端将两个 ssh 连接合并为一个?