python - Python请求库不接受asp net core dev证书
问题描述
我目前正在尝试使用 python 向 asp net core (.NET 5) API 发出一个简单的获取请求。API 在 kestrel 上以默认设置运行(仅限 HTTPS,允许 HTTP 1 和 2)。
问题
问题是,我的电话
r = requests.get("https://localhost:5001/api/authentication", params=payload, verify='../browser_exported.cer')
产生众所周知的错误
(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:无法获取本地颁发者证书
当我通过一切按预期禁用验证时verify=False
,但在我的情况下这不是一个可行的解决方案。
到目前为止我尝试了什么
- 使用
verify=False
which 有效但不是解决方案 - 在将站点浏览为 base64 编码的 .cer 文件时通过我的浏览器导出证书(如此处和此处所述),并通过
certmgr
(此处解释)导出证书,尽管两者都调用相同的向导。verify='<path>'
通过(如上所示)将此证书提供给 python 。- 将证书从 certifi 复制到 cacert.pem(使用相同的环境来执行用于执行请求的 certifi.where())
- 安装 python-certifi-win32 但在查看它的源代码后,我注意到这只会从 win cert store导入
CA
和导入。ROOT
(asp net core dev 证书是这些商店中不存在的自签名证书) der
使用编码导出证书。这产生了预期的错误:SSLError(SSLError(136, '[X509: NO_CERTIFICATE_OR_CRL_FOUND] no certificate or crl found (_ssl.c:4263)')))
- 验证 python 在将其指定为
verify
参数时确实找到了我的证书文件。为此,我给了它一个指向不存在文件的路径,它产生了预期的错误:Could not find a suitable TLS CA certificate bundle, invalid path: ../nothinghere.cer
附加信息
- 我正在运行 Windows 10 2004 19041.804 x64
- Chrome 88.0.4324.182(导出证书)
- 蟒蛇 3.8.5
- 证书 2020.12.5
- 请求 2.25.1
- 我不在任何(公司)代理后面,也没有安装任何 vpn
- asp net core dev 证书未链接
解决方案
推荐阅读
- batch-file - 为什么在win 7下将输出分配给cmd批处理脚本中的变量时会出现这种奇怪的行为
- javascript - LuxonJs 格式化日期
- gdb - Qemu 问题中用于 m68k 的 GDB
- php - 写这段代码的主要目的是什么?
- haskell - Haskell 堆配置文件中的奇怪箭头
- python - 在 SSLContext 中使用 Kubernetes 机密
- regex - 编写正则表达式的更短/更优雅的方式
- node.js - 将 typescript 节点容器部署到 heroku
- .net - 定义上限值时如何计算数字的总和?
- macos - 如何删除 VIM 作为我的 Mac 编辑器 vs sublime