gpt4 book ai didi

python - 为通过 HTTPS 隧道的请求设置 CA bundle

转载 作者:行者123 更新时间:2023-12-03 16:35:16 25 4
gpt4 key购买 nike

我正在尝试通过 HTTPS 隧道发送 HTTPS 请求。也就是说,我的代理需要 HTTPS 进行 CONNECT。它还需要一个客户端证书。
我正在使用 Requests' proxy features .

import requests

url = "https://some.external.com/endpoint"
with requests.Session() as session:
response = session.get(
url,
proxies={"https": "https://proxy.host:4443"},
# client certificates expected by proxy
cert=(cert_path, key_path),
verify="/home/savior/proxy-ca-bundle.pem",
)
with response:
...
这可行,但有一些限制:
  • 我只能为与代理的 TLS 连接设置客户端证书,而不能为外部端点设置客户端证书。
  • proxy-ca-bundle.pem仅验证与代理的 TLS 连接中的服务器证书。来自外部端点的服务器证书似乎被忽略了。

  • 有什么方法可以使用 requests解决这两个问题?我想为外部端点设置一组不同的 CA。
    我也尝试使用 http.client HTTPSConnection.set_tunnel 但是,据我所知,它的隧道是通过 HTTP 完成的,我需要 HTTPS。

    最佳答案

    看源码,好像不是requests目前支持这种“TLS中的TLS”,即。为代理请求提供两组客户端/CA 包。

    我们可以使用PycURL它简单地包装了 libcurl

    from io import BytesIO

    import pycurl

    url = "https://some.external.com/endpoint"
    buffer = BytesIO()

    curl = pycurl.Curl()
    curl.setopt(curl.URL, url)
    curl.setopt(curl.WRITEDATA, buffer)
    # proxy settings
    curl.setopt(curl.HTTPPROXYTUNNEL, 1)
    curl.setopt(curl.PROXY, "https://proxy.host")
    curl.setopt(curl.PROXYPORT, 4443)
    curl.setopt(curl.PROXY_SSLCERT, cert_path)
    curl.setopt(curl.PROXY_SSLKEY, key_path)
    curl.setopt(curl.PROXY_CAINFO, "/home/savior/proxy-ca-bundle.pem")
    # endpoint verification
    curl.setopt(curl.CAINFO, "/home/savior/external-ca-bundle.pem")

    try:
    curl.perform()
    except pycurl.error:
    pass # log or re-raise
    else:
    status_code = curl.getinfo(curl.RESPONSE_CODE)

    PycURL 将使用 PROXY_设置以建立与代理的 TLS 连接,向其发送 HTTP CONNECT 请求。然后它将通过代理连接到外部端点建立一个新的 TLS session 并使用 CAINFO捆绑以验证这些服务器证书。

    关于python - 为通过 HTTPS 隧道的请求设置 CA bundle ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61830705/

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