gpt4 book ai didi

windows - 添加客户端证书后在 Windows 上使用 Python 和 Postman 的 "unable to get local issuer certificate"

转载 作者:行者123 更新时间:2023-12-04 22:36:35 29 4
gpt4 key购买 nike

我是一名使用 Windows 10 工作的数据工程师。
我正在尝试在 Python 中发出一个简单的 Post 请求,以将身份验证 token 检索到自定义数据库服务。
我的代码尽可能简单:

import requests
import ssl
import certifi


url = ""
headers = {'Content_Type': 'application/x-www-form-urlencoded'}
payload = {
'password': '',
'scope': '',
'client_id': '',
'client_secret': '',
'username': '',
'grant_type': ''

}

if __name__ == '__main__':
token_response = requests.request("POST", url, headers=headers, data=payload)
print(token_response.content)
我已经删除了有效载荷值以及隐私的 url 值。当我运行代码时,我回来了
enter image description here

enter image description here
“url 超出最大重试次数”和“[SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:无法获取本地颁发者证书 (_ssl.c:1129)”。
我可以通过设置 verify=False 来回避这个错误。在我的 Post 请求中,但鉴于我正在处理敏感数据,我不能这样做。我提到这一点是为了证明我的凭据确实有效,而且 Cinchy 证书、我的 python 设置或我正在处理的业务网络(VPN?其他什么?)显然有问题。
我从这个答案 ( https://stackoverflow.com/a/67998066/9403186) 中看到,可能是“如果您在业务网络下运行,请联系网络管理员以在网络级别应用所需的配置。”我当然在业务网络下运行,所需的配置是什么样的?
关于此错误的大多数答案都提到您需要下载 url 的 CA 证书(例如这里 Windows: Python SSL certificate verify failed ),但我已经这样做了,但它不起作用。我去了该站点,登录,单击带有锁的 Chrome 图标,并将证书下载为 Base-64 编码的 X.509,并将其添加到我的证书 cacert.pem 文件“C:\Users\gblinick\AppData\Local\Programs\Python\Python39\lib\site-packages\certifi\cacert.pem' 根据 https://medium.com/@menakajain/export-download-ssl-certificate-from-server-site-url-bcfc41ea46a2 .
在这里的任何帮助将不胜感激。我的预感是它与业务网络有关,但我不知道如何检查。想法会很棒。
如果我可以提供更多信息,请告诉我。
非常感谢!
编辑: Postman 的请求也不起作用,除非我关闭 SSL 身份验证,所以很明显这是同样的问题,这不仅仅是 Python 的问题。
但是,如果我使用 Powershell 提出相同的请求,它确实有效:
# [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$Result = Invoke-WebRequest -Uri $Endpoint -UseBasicParsing -Method 'Post' -Body $Body -Headers $Header -ErrorAction Stop # -SslProtocol Tls
无论我是否将第一行注释掉,这都有效。看起来 Powershell 可能有一些 Python 和 Powershell 没有的内置 SSL 或 TLS 功能。那,或者服务器以某种方式期望 Powershell 连接而不是 Postman 或 Python。请注意,我有 # -SslProtocol Tls注释掉是因为我使用的是 Powershell 5.1,其中 SslProtocol不存在。

最佳答案

最终,答案非常简单:我下载了错误的公司证书。从 Chrome 下载 SSL 证书时,有一个“证书路径”选项卡。我的里面有3个证书,我称它们为A,B,C。B是A的后代,C是B的后代。我下载的错误是最低级别的C。当我下载 A 并将其放入我的 cacert.pem 文件时,它起作用了。

关于windows - 添加客户端证书后在 Windows 上使用 Python 和 Postman 的 "unable to get local issuer certificate",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68810950/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com