Python请求库不接受asp net core dev证书

问题描述

我目前正在尝试使用 python 向 asp net core (.NET 5) API 发出一个简单的 get 请求。 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
  • 浏览网站时通过我的浏览器导出证书作为 base64 编码的 .cer 文件(如 explained herehere),并通过 certmgr 导出证书(解释为 {{ 3}}) 虽然两者都调用相同的向导。
    • 通过 verify='<path>' 将此证书提供给 python(如上所示)。
    • 将证书从 certifi 复制到 cacert.pem(使用相同的环境执行用于执行请求的 certifi.where())
  • 正在安装 python-certifi-win32,但在查看其 here 后,我注意到这只会从 win 证书存储中导入 CAROOT。 (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(用于导出证书)
  • Python 3.8.5
  • 证书 2020.12.5
  • 请求 2.25.1
  • 我没有支持任何(公司)代理,也没有安装任何 vpn
  • asp net core dev 证书未链接

source code

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)