You need to enable JavaScript to run this app. Python requests访问ASP.NET Core自签名HTTPS本地站点验证失败问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

Python requests访问ASP.NET Core自签名HTTPS本地站点验证失败问题咨询

问题原因
  • ASP.NET Core本地开发环境自动生成的HTTPS证书是两级结构:自签名的根CA证书 + 根CA签发的localhost站点证书。你从浏览器导出的仅为站点的叶子证书,缺失根CA证书,所以SSL验证时无法找到信任的颁发者,才会出现unable to get local issuer certificate报错。
  • .NET的HttpClient默认读取系统证书存储,.NET首次安装时已经将自己生成的开发根证书加入了系统信任列表,所以可以直接访问成功;而Python requests默认使用certifi包提供的CA证书集合,不会读取系统信任的证书,因此验证失败。
解决方案

方案1:直接导出ASP.NET Core开发根证书(推荐)

直接用dotnet官方命令导出根证书,无需手动从浏览器/MMC导出:

  1. 打开命令行终端,执行以下命令:
    dotnet dev-certs https --export-path ./aspnetcore-dev-root.pem --format Pem
  2. 发起requests请求时,将verify参数指向导出的pem文件即可:
import requests
url = 'https://localhost:44355'
resp = requests.get(url, verify='./aspnetcore-dev-root.pem')
print(resp.text)
  1. 如果要全局生效,直接把这个pem文件的内容追加到certifi.where()输出的cacert.pem文件末尾即可。

方案2:让requests读取系统证书存储

如果不想手动管理证书,可以安装第三方包让requests复用系统信任的证书,和.NET HttpClient行为一致:

  1. 安装依赖包:
    pip install requests-system-ca
  2. 代码中导入包后直接发起请求即可,无需额外配置:
import requests
import requests_system_ca

url = 'https://localhost:44355'
resp = requests.get(url)
print(resp.status_code)

方案3:导出完整证书链

如果坚持使用从浏览器导出的证书,导出时需要选择导出完整证书链:

  1. Chrome导出证书时,选择「Base64编码的X.509(.CER)」格式,并且勾选「导出证书链中的所有证书」选项。
  2. 导出后的pem文件会同时包含站点证书和根CA证书,直接传入verify参数即可验证通过。
验证方法

导出根证书后,可以用openssl命令验证证书是否有效:
openssl verify -CAfile ./aspnetcore-dev-root.pem 你之前导出的站点证书路径
如果输出ok就说明配置正确。

内容的提问来源于stack exchange,提问作者Lei Yang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 14:30:04