在擁有 .pfx 文件和其密碼(若有加密)的前提下進(jìn)行 https 請(qǐng)求
(關(guān)于這些文件的說(shuō)明袖迎,參考:https://blog.51cto.com/wushank/1915795)冕臭;
所有方法均忽略了服務(wù)器響應(yīng)包的簽名認(rèn)證,即只對(duì)請(qǐng)求使用自簽名證書(shū)進(jìn)行加密燕锥。
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) # 若需要對(duì)響應(yīng)包進(jìn)行驗(yàn)證辜贵,則需要給 verify 傳參
2. requests 使用 .crt 和 .key
import requests
resp = requests.post('https://www.example.com/path', data='payload', cert=('example.crt', 'example.key'), verify=False) # 若需要對(duì)響應(yīng)包進(jìn)行驗(yàn)證,則需要給 verify 傳參
example.key 和 example.crt 由 .pfx 文件使用 openssl 轉(zhuǎn)換而來(lái)(若 pfx 有密碼則會(huì)提示輸入密碼):
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 # 指明不驗(yàn)證響應(yīng)包
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()