Python 3.x p12证书验证python

Python 3.x p12证书验证python,python-3.x,openssl,Python 3.x,Openssl,我正在尝试使用提供者提供的p12证书进行身份验证,并希望使用它来获取站点的html正文 我目前拥有以下代码: import contextlib import OpenSSL.crypto import os import requests import ssl import tempfile import http.client import shutil from OpenSSL import crypto url = "https://website.com/" p12_cert =

我正在尝试使用提供者提供的p12证书进行身份验证,并希望使用它来获取站点的html正文

我目前拥有以下代码:

import contextlib
import OpenSSL.crypto
import os
import requests
import ssl
import tempfile
import http.client
import shutil
from OpenSSL import crypto

url = "https://website.com/"


p12_cert = "cert.p12"
password = "password"

@contextlib.contextmanager
def pfx_to_pem(pfx_path, pfx_password):
    ''' Decrypts the .pfx file to be used with requests. '''
    with tempfile.NamedTemporaryFile(suffix='.pem') as t_pem:
      f_pem = open(t_pem.name, 'wb')
      pfx = open(pfx_path, 'rb').read()
      p12 = OpenSSL.crypto.load_pkcs12(pfx, pfx_password)


f_pem.write(OpenSSL.crypto.dump_privatekey(OpenSSL.crypto.FILETYPE_PEM, p12.get_privatekey()))
    f_pem.write(OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_PEM, p12.get_certificate()))
    f_pem.close()
    yield t_pem.name

with pfx_to_pem(p12_cert, password) as cert:
    requests.get(url, verify=cert)
任何指导都是非常可取的


谢谢

您可以将p12文件拆分为其证书/密钥部分,并将其作为元组使用,以替代单个.pem文件路径

完成后不要忘记删除密钥和crt文件,以防您不想永久存储未加密的p12文件,而只想在运行时对其解密

certpw = 'myTopSecretPassword'

# create pem file from p12
p12 = crypto.load_pkcs12(open("/file.p12", 'rb').read(), certpw.encode())

# PEM formatted private key
k = crypto.dump_privatekey(crypto.FILETYPE_PEM, p12.get_privatekey())
fkey = open('/myKey.key', 'wb')
fkey.write(k)
fkey.close()

# PEM formatted certificate
c = crypto.dump_certificate(crypto.FILETYPE_PEM, p12.get_certificate())
fcert = open('/myCert.crt', 'wb')
fcert.write(c)
fcert.close()

clientcert = ('/myCert.crt', '/myKey.key')

# if you work with a .pem file, you simply use 'cert='/myPEMFile.pem' after dumping the key/cert data in the .pem file
requests.get('https://someurl.org', cert=('/myCert.crt', '/myKey.key'))

verify=
用于验证服务器证书的CA证书。对于客户端证书+密钥,请使用
cert=
@Pon:我也无法使用此代码进行身份验证。你能分享一下你的代码吗?在使用rest cliend时,我能够进行身份验证和发布,但使用python请求。发布我的证书Varificantin失败。顺便说一句,我也有一个带有密码的p12证书,我正在使用您的上述代码。同样,使用上述代码,我得到以下错误:
>>使用pfx\u to\u pem('C:\\Users\\ukhare\\Desktop\\gos\\trial\u tata.p12','trialtata')作为证书:…请求。获取('https://IP:8080/siteapi/availabletests“,verify=cert)…回溯(最后一次调用):文件“”,第1行,在文件“D:\m\Python34\lib\contextlib.py”的第59行,在uuu输入uu返回下一个(self.gen)文件“”,第6行,在pfx_to_pem PermissionError:[Errno 13]权限被拒绝:“C:\\Users\\ukhare\\AppData\\Local\\Temp\\tmpbx5ru9gv.pem”
嘿,你能分享你的代码片段吗?谢谢!