我正在尝试使用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)
答案 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()