首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >p12证书认证python

p12证书认证python
EN

Stack Overflow用户
提问于 2018-03-08 07:43:18
回答 1查看 3.2K关注 0票数 0

我正在尝试认证一个p12证书提供给一个供应商,并希望使用它来获得网站的html主体。

我目前有以下代码:

代码语言:javascript
复制
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)

ANy指导是非常受欢迎的。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2019-08-12 21:55:30

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

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

代码语言:javascript
复制
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'))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49163100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档