gpt4 book ai didi

internet-explorer - 将 wincertstore 与请求一起使用(或将 pfx 转换为 pem)会得到 SSLError

转载 作者:行者123 更新时间:2023-12-02 04:31:27 25 4
gpt4 key购买 nike

我正在尝试使用 wincertstore 将 Internet Explorer (IE) 证书传递给 requests 以便下载文件。我的代码是:

import requests
import wincertstore

certfile = wincertstore.CertFile()
certfile.addstore('CA')
certfile.addstore('ROOT')
certfile.addstore('foocert_node0')
certfile.addstore('foocert_node1')
certfile.addstore('foocert_node2')

url = 'https://portal.foo.com/blahblahblah'
r = requests.get(url, verify=certfile.name)

我得到的错误是:

SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_read_bytes', 'sslv3 alert handshake failure')],)",)

客户端(我认为是指我试图从 url 下载文件的站点,即 foo.com)已经给了我一个包含 3 个节点的证书,该证书已经加载在 IE 证书商店中。不幸的是,客户端仅使用 IE 证书。

我不确定是否需要将我的客户端证书节点显式添加到证书文件中,但无论哪种方式,我仍然会遇到相同的错误。

有趣的是,如果我只是将 url 粘贴到 IE 窗口并按回车键,我会看到一个 Windows 安全/确认证书弹出窗口,一旦我接受,文件就会下载。不幸的是,我正在尝试自动执行此过程(使用 selenium),所以我想要一个适用于 requests 的解决方案。

我还尝试将客户端证书转换为 pem,首先将 Windows 证书导出为 pfx,然后使用以下代码:

import OpenSSL.crypto
import os
import requests
import ssl

def convertpfxtopem(certificate_pfx, password_pfx, certificate_pem):
f_pem = open(certificate_pem, 'wb')
pfx = open(certificate_pfx, 'rb').read()
p12 = OpenSSL.crypto.load_pkcs12(pfx, str.encode(password_pfx))
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()))
ca = p12.get_ca_certificates()
if ca is not None:
for cert in ca:
f_pem.write(OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_PEM, cert))
f_pem.close()
return Trueurlfile = 'test.xlsx'

convertpfxtopem(certificate_pfx, password_pfx, certificate_pem)
r = requests.get(url, verify=certificate_pem)

如果我使用这段代码,我会得到同样的 SSLError。

我错过了什么?非常感谢您的帮助。

最佳答案

所以我正在寻找的解决方案比我意识到的要简单得多。原来 curl 已经使用了 Windows 证书存储。所以从 python/windows,这是有效的:

import subprocess
subprocess.call(['curl', '-O', '-J', url], cwd='Temp')

-O 和 -J 标志使用文件头中的名称在本地保存文件,cwd 允许您将输出放在您选择的目录中(该目录需要已经存在)。

关于internet-explorer - 将 wincertstore 与请求一起使用(或将 pfx 转换为 pem)会得到 SSLError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48390388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com