gpt4 book ai didi

python - 如何让 python 信任我服务器的 TLS 自签名证书 : ssl. SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败

转载 作者:行者123 更新时间:2023-12-03 11:53:46 27 4
gpt4 key购买 nike

这不是 this post 的副本.我尝试了那里的解决方案,但在我的情况下没有任何效果。

我正在使用 Windows 和 Python 3.6.5。我有一个用于 TLS 客户端的 python 脚本。我需要连接的服务器使用自签名证书。当我尝试使用我的脚本连接到它时,出现此错误:

ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)

我需要解析证书。我尝试将服务器的证书 .pem 内容添加到名为 cacert.pem 的文件中,该文件位于:C:\Python36\Lib\site-packages\certifi 并再次运行程序。没变化。这是我的脚本。请帮助我让客户端对此服务器进行异常(exception)处理,因为我信任它的证书。

import socket, ssl
import itertools

context = ssl.SSLContext()
context.verify_mode = ssl.CERT_OPTIONAL
context.check_hostname = False

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
domain="192.168.56.3" # my server
ssl_sock = context.wrap_socket(s, server_hostname=domain)
ssl_sock.connect((domain, 443))

print("====== peer's certificate ======")
try:
cert = ssl_sock.getpeercert()
print(cert)
except SSLError as e:
print("Error: ",e)
ssl_sock.close()

最佳答案

这个问题已经闲置了一段时间,但如果有人仍在努力通过 Python ssl 库连接到具有自签名证书的服务器:

您可以使用SSLContextload_verify_locations 方法来指定自定义自签名根证书(参见Python Docs for load_verify_locations)。

上述代码可以扩展如下:

...

context = ssl.SSLContext()
context.verify_mode = ssl.CERT_OPTIONAL
context.check_hostname = False

context.load_verify_locations(cafile='/path/to/your/cacert.pem')

...

请注意,您还需要包含公共(public)根证书,以防您想要使用具有相同客户端/上下文的公共(public)证书连接到其他服务器。 (例如,您可以将 cacert.pem 内容附加到 certifi 根证书并改为引用该文件夹/路径)。

另请参阅此 Python 文档段落以获取更多信息:client-side operations .

关于python - 如何让 python 信任我服务器的 TLS 自签名证书 : ssl. SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50058209/

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