如何在 Python3 中使用自签名证书

How to use self-signed certificate in Python3

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

Dec15.cer

我 运行 遇到以下错误

ERROR: Host not reachable [HTTPSConnectionPool(host='10.66.194.98', port=8531): Max retries exceeded with url: /ApiRemoting30/WebService.asmx (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)'),))]

这是我试过的。

wsusutil.exe 配置SSL 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))

虽然有问题的证书 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.