gpt4 book ai didi

ssl - 配置代理的 get_server_certificate() 的替代方法

转载 作者:太空宇宙 更新时间:2023-11-03 14:28:08 25 4
gpt4 key购买 nike

我正在尝试通过调用 ssl.get_server_certificate() 来获取目标网站的证书。如果在我的服务器上配置了代理,则此请求超时(否则工作正常)。有没有办法将代理设置传递给 ssl 以获取目标服务器的证书?或者是否有任何其他替代方法来获取目标网站的证书以实现代理设置。

此外,目标网站不断变化,因此不能将它们添加到防火墙规则中以避免超时。

self.host = 'target-website.com'
self.port = 443
PROXY = (''proxy_ip_addr', 3128)
current_cert = ssl.get_server_certificate((self.host, self.port),
ssl_version=ssl.PROTOCOL_TLSv1)

最佳答案

get_server_certificate 不支持代理。但是使用一些代码,您可以使用 HTTP CONNECT 请求通过代理创建隧道,将隧道升级到 SSL,然后获取证书:

import socket
import ssl

host = ('target.example.com',443)
proxy = (proxy_ip,proxy_port)

# connect to proxy
s = socket.socket()
s.connect(proxy)

# create tunnel to target
s.send("CONNECT {}:{} HTTP/1.0\r\n\r\n".format(*host))
buf = s.recv(8192)
assert(buf[9:12] == '200') # HTTP/1.1 200 ...

# upgrade socket to ssl - ignore certifcate errors since we only want
# to get the certificate and don't transfer sensitive data
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
cert = ctx.wrap_socket(s, server_hostname = host[0]).getpeercert(True)
print(ssl.DER_cert_to_PEM_cert(cert))

关于ssl - 配置代理的 get_server_certificate() 的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55110849/

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