【问题标题】:How to use self-signed certificate in Python3如何在 Python3 中使用自签名证书
【发布时间】:2019-05-25 05:40:04
【问题描述】:

我在 Windows Server 2012 R2 [WSUS Server - 10.66.194.98] [Dec15.cer] 中生成了自签名证书,并在所有“WSUS 管理”网站中启用了 SSL。现在我想在 python 代码中使用它来与服务器联系。

Dec15.cer

我遇到了以下错误

错误:主机无法访问 [HTTPSConnectionPool(host='10.66.194.98', port=8531):最大重试次数超出了 url:/ApiRemoting30/WebService.asmx(由 SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED) 引起] 证书验证失败 (_ssl.c:833)'),))]

这是我尝试过的。

wsusutil.exe configuressl 10.66.194.98

然后我将 Dec15.cer 复制到 python 根目录。并运行以下代码

from requests import Session
from requests_ntlm import HttpNtlmAuth

user = 'administrator'
password = '******'
session = Session()
session.cert = session.verify = 'Dec15.cer'
# session.verify = False
session.auth = HttpNtlmAuth(user, password)
print(session.get("https://10.66.194.98:8531/ApiRemoting30",
              verify=session.verify,
              cert=session.cert))

【问题讨论】:

  • cert 参数用于客户端证书(也需要匹配的私钥),而不用于 CA 证书。此外,verify 中给出的值必须是 CA 证书(或多个 CA 证书),并且不清楚您的 Dec15.cer 实际包含什么。一个简单的叶子证书是行不通的。
  • 注意verifycert 之间存在差异。 docs.python-requests.org/en/master/user/advanced/…
  • @SteffenUllrich Dec15.cer 实际上是我从 IIS 生成并与 WSUS 管理网站绑定的自签名证书。我简单地将证书保存到 cer 文件并复制到 python build。似乎python没有兑现证书。
  • @kcorlidy 谢谢。想知道如何在python中使用IIS生成的自签名证书。
  • @AlenNishabu:目前还不清楚Dec15.cer 实际包含什么。我建议实际提供文件(证书仅包含公共数据,不包含私钥),以便仔细查看。

标签: python-3.x ssl python-requests self-signed windows-update


【解决方案1】:

虽然有问题的证书Dec15.cer 是自签名证书,但它没有基本约束 CA:true:

$ openssl x509 -text -in Dec15.cer 
...
    X509v3 extensions:
        X509v3 Key Usage: 
            Key Encipherment, Data Encipherment
        X509v3 Extended Key Usage: 
            TLS Web Server Authentication

但是,正如我在评论中所说,requests 中的 verify 参数的证书必须是 CA 证书,即具有基本约束 CA:true

【讨论】:

  • 所以基本上没有办法让 Python 3 信任自签名证书?
  • @JingHe:看起来在 Python 3.10 中他们终于暴露了 X509_V_FLAG_PARTIAL_CHAIN 标志 - 参见bugs.python.org/issue40849。使用此标志,应该可以设置 SSLContext.verify_flags 以便它可以处理信任存储中带有 CA:false 的证书。
  • 非常感谢! @SteffenUllrich
猜你喜欢
  • 1970-01-01
  • 2020-09-27
  • 2018-01-12
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2015-11-01
相关资源
最近更新 更多