如何在 Python3 中使用自签名证书
How to use self-signed certificate in Python3
我在 Windows Server 2012 R2 [WSUS 服务器 - 10.66.194.98] [Dec15.cer] 中生成了自签名证书,并在所有 'WSUS Administration' 网站中启用了 SSL。现在我想在 python 代码中使用它来联系服务器。
我 运行 遇到以下错误
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
.
我在 Windows Server 2012 R2 [WSUS 服务器 - 10.66.194.98] [Dec15.cer] 中生成了自签名证书,并在所有 'WSUS Administration' 网站中启用了 SSL。现在我想在 python 代码中使用它来联系服务器。
我 运行 遇到以下错误
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
.