Python 为通过HTTPS隧道的请求设置CA捆绑包
我正在尝试通过HTTPS隧道发送HTTPS请求。也就是说,我的代理希望连接使用HTTPS。它还需要客户端证书。 我正在使用Python 为通过HTTPS隧道的请求设置CA捆绑包,python,ssl,https,python-requests,http-tunneling,Python,Ssl,Https,Python Requests,Http Tunneling,我正在尝试通过HTTPS隧道发送HTTPS请求。也就是说,我的代理希望连接使用HTTPS。它还需要客户端证书。 我正在使用 导入请求 url=”https://some.external.com/endpoint" 将requests.Session()作为会话: response=session.get( 网址, 代理={“https”:https://proxy.host:4443"}, #代理需要客户端证书 证书=(证书路径,密钥路径), verify=“/home/savior/prox
导入请求
url=”https://some.external.com/endpoint"
将requests.Session()作为会话:
response=session.get(
网址,
代理={“https”:https://proxy.host:4443"},
#代理需要客户端证书
证书=(证书路径,密钥路径),
verify=“/home/savior/proxy ca bundle.pem”,
)
答复如下:
...
这是可行的,但有一些限制:
代理ca bundle.pem
仅验证TLS与代理连接中的服务器证书。来自外部端点的服务器证书似乎被忽略请求来解决这两个问题?我想为外部端点设置一组不同的CA
我也尝试过使用http.client
,但据我所知,它的隧道是通过http完成的,我需要HTTPS。查看源代码,它看起来不像请求
当前支持这种“TLS中的TLS”,即为代理请求提供两组客户端/CA捆绑包
我们可以使用它来简单地包装libcurl
从io导入字节io
导入pycurl
url=”https://some.external.com/endpoint"
buffer=BytesIO()
curl=pycurl.curl()
setopt(curl.URL,URL)
setopt(curl.WRITEDATA,缓冲区)
#代理设置
curl.setopt(curl.HTTPPROXYTUNNEL,1)
curl.setopt(curl.PROXY,“https://proxy.host")
curl.setopt(curl.PROXYPORT,4443)
curl.setopt(curl.PROXY\u SSLCERT,cert\u路径)
setopt(curl.PROXY\u SSLKEY,key\u path)
curl.setopt(curl.PROXY_CAINFO,“/home/savior/PROXY ca bundle.pem”)
#端点验证
curl.setopt(curl.CAINFO,“/home/savior/external ca bundle.pem”)
尝试:
curl.perform()
除了pycurl.error:
通过#记录或重新升起
其他:
状态代码=curl.getinfo(curl.RESPONSE代码)
PycURL将使用代理设置
建立到代理的TLS连接,并向其发送HTTP连接请求。然后,它将通过到外部端点的代理连接建立一个新的TLS会话,并使用CAINFO
包来验证这些服务器证书