Python 发送带自签名证书的 https 请求

2019-04-16  本文已影响0人  wizdzz

在拥有 .pfx 文件和其密码(若有加密)的前提下进行 https 请求
(关于这些文件的说明,参考:https://blog.51cto.com/wushank/1915795);
所有方法均忽略了服务器响应包的签名认证,即只对请求使用自签名证书进行加密。

1. requests-pkcs12 使用 .pfx

pip install requests-pkcs12

import requests_pkcs12

resp = requests_pkcs12.post('https://www.example.com/path', data='payload', pkcs12_filename='server.pfx', pkcs12_password='password', verify=False)  # 若需要对响应包进行验证,则需要给 verify 传参

2. requests 使用 .crt 和 .key

import requests

resp = requests.post('https://www.example.com/path', data='payload', cert=('example.crt', 'example.key'), verify=False)  # 若需要对响应包进行验证,则需要给 verify 传参

example.key 和 example.crt 由 .pfx 文件使用 openssl 转换而来(若 pfx 有密码则会提示输入密码):

openssl pkcs12 -in example.pfx -nocerts -nodes -out example.key
openssl pkcs12 -in example.pfx -clcerts -nokeys -out example.crt

3. httplib.HTTPSConnection 使用 .crt 和 .key

import httplib
import ssl

ssl._create_default_https_context = ssl._create_unverified_context  # 指明不验证响应包

conn = httplib.HTTPSConnection("www.example.com", port=443, key_file='example.key', cert_file='example.crt')
conn.request('POST', '/path', body='payload')
retCreateCon = conn.getresponse()
上一篇下一篇

猜你喜欢

热点阅读