Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为通过HTTPS隧道的请求设置CA捆绑包_Python_Ssl_Https_Python Requests_Http Tunneling - Fatal编程技术网

Python 为通过HTTPS隧道的请求设置CA捆绑包

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

我正在尝试通过HTTPS隧道发送HTTPS请求。也就是说,我的代理希望连接使用HTTPS。它还需要客户端证书。

我正在使用

导入请求
url=”https://some.external.com/endpoint"
将requests.Session()作为会话:
response=session.get(
网址,
代理={“https”:https://proxy.host:4443"},
#代理需要客户端证书
证书=(证书路径,密钥路径),
verify=“/home/savior/proxy ca bundle.pem”,
)
答复如下:
...
这是可行的,但有一些限制:

  • 我只能为带有代理的TLS连接设置客户端证书,而不能为外部端点设置客户端证书
  • 代理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
    包来验证这些服务器证书