微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。