如何使用python ssl为tls连接设置证书

2024-06-16 12:05:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经为此挣扎了几天。我有一个tls服务器正在运行,在另一台连接到它的机器上有一些c代码。当我尝试连接时,会出现以下错误:

ssl.SSLError: [SSL: TLSV2_ALERT_UNKNOWN_CA] tlsv2 alert unknown ca

我猜这是因为客户端证书是自签名的,因此服务器无法识别ca。我想解决这一问题的方法是,以某种方式将客户端的证书存储在服务器上,这样当客户端连接到服务器时,就可以验证证书,因为它已经存储为受信任的证书。至于如何做到这一点,我不确定。我见过“context.load\u verify\u locations('path/to/cabundle.pem')方法,但我不确定要为该方法参数生成哪个证书/如何生成证书。 我一直在循环生成证书,并尝试了许多不同的方法。所以现在我只想从头开始生成它,但我还没有找到任何有效的在线帮助

这是我的服务器代码:

from socket import socket, AF_INET, SOCK_STREAM, SOCK_DGRAM
import ssl
import os

certs_path = "certs/"
SERVER_CERT = os.path.join(certs_path, "dev_server.crt")
SERVER_KEY = os.path.join(certs_path, "dev_server.key")

ip = '127.0.0.1'
port = 8443
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
context.load_cert_chain(SERVER_CERT, SERVER_KEY)

sock = socket(AF_INET, SOCK_STREAM)
sock.bind(('', port))
sock.listen(5)

print(f"Listening for TCP connections on port: {port}")

while True:
    connection, sender = sock.accept()
    sec_sock = context.wrap_socket(connection, server_side=True)
    request = sec_sock.read()
    decoded = request.decode("utf-8")
    print(f"Received {decoded} from {sender[0]}:{sender[1]}")

我的问题是,如果我要从头开始生成证书以用于此服务器和客户端,我将如何做到这一点


Tags: path方法import服务器客户端sslserveros