如何使用Python请求使用密码验证自签名证书

时间:2018-04-01 09:02:34

标签: python openssl python-requests pyopenssl

我正在尝试使用python请求向IIS服务器发送https请求并获取解析响应。使用自签名证书完成身份验证。我使用以下命令生成了带密码和密钥的证书。我使用TestPublicKey.pem和plainkey.pem作为requests.get方法中cert属性的输入。有人可以指导我如何实现这个目标吗?

C:\OpenSSL-Win64\bin>openssl req -x509 -newkey rsa:2048 -keyout TestPrivateKey.pem -out TestPublicKey.pem -days 9999

C:\OpenSSL-Win64\bin>openssl pkcs12 -inkey TestPrivateKey.pem -in TestPublicKey.pem -export -out Test.pfx
Enter pass phrase for cTestPrivateKey.pem:
Enter Export Password:
Verifying - Enter Export Password:

C:\OpenSSL-Win64\bin>openssl rsa -in TestPrivateKey.pem -out plainkey.pem
Enter pass phrase for TestPrivateKey.pem:
writing RSA key


import requests
url = "https://10.110.20.75/itoc/REST/Updates"
r = requests.request("GET", url, verify=False,cert=('TestPublicKey.pem','plainkey.pem'))
print r.status_code

如果verify设置为False,则获取403 status_code。如果verify设置为True,则会引发SSL错误异常。

 raise SSLError(e, request=request)
requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661)

1 个答案:

答案 0 :(得分:0)

我通过尝试使用以下openssl命令和python代码解决了这个问题。 注意:这个答案是没有密码的证书,如果有任何答案或评论。我很高兴看到。

<强> Open SSL commands

生成自签名证书

openssl req -x509 -nodes -days 30 -newkey rsa:2048 -keyout test_Private.key -out test_certificate.cer -subj "/CN=*.hpe.com"

将证书和私钥转换为.PFX

openssl pkcs12 -export -out test_PFX.pfx -inkey test_Private.key -in test_certificate.cer -name "*.hpe.com" -passout pass: 

<强> Python code

import requests
url = "https://10.110.20.75/itoc/REST/Updates"
webServiceResponse=requests.request("GET",url,verify='test_certificate.cer)
print webServiceResponse.status_code
print webServiceResponse.json()