【发布时间】:2018-10-08 01:14:34
【问题描述】:
这不是 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 并再次运行该程序。没有什么变化。这是我的脚本。请帮助我让客户端对此服务器例外,因为我信任它的证书。
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()
【问题讨论】:
-
很难说是怎么回事,因为没有办法根据信息重现它。但是,假设代码使用的是您添加证书的 cacert.pem,那么我的猜测是该证书不是 CA 证书,而只是一个自签名的非 CA 证书——这还不够,跨度>
-
我认为这个问题是你另一个问题的重复:stackoverflow.com/questions/50055935/…。
标签: python sockets ssl network-programming