python - 如何使用 python ssl 为 tls 连接设置证书
问题描述
我已经为此苦苦挣扎了几天。我有一个正在运行的 tls 服务器和连接到它的另一台机器上的一些 c 代码。当我尝试连接时,出现错误:
ssl.SSLError: [SSL: TLSV2_ALERT_UNKNOWN_CA] tlsv2 alert unknown ca
我猜这是因为客户端证书是自签名的,因此服务器无法识别 ca. 我想解决这个问题的一种方法是以某种方式将客户端的证书存储在服务器上,以便当它连接到它时可以验证证书,因为它已经将它存储为受信任的。至于如何做到这一点,我不确定。我已经看到方法“context.load_verify_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]}")
我的问题是,如果我要从头开始生成证书以用于此服务器和客户端,我会怎么做?
解决方案
推荐阅读
- heroku - 几个heroku postgres问题(刚开始,我迷路了)
- tensorflow - 如何管理 model.provide_groundtruth 的批次
- linux - 由于 NGRAPH_VERSION,无法在 Raspberry Pi 上 CMake NGraph
- python - 属性错误:“浮动”对象没有属性
- java - 根据旋转角度更改 ImageView 位置
- python-3.x - 在 python 中使用列名和索引创建一个循环
- java - SnakeGame 类型必须实现继承的抽象方法 KeyListener.keyReleased(KeyEvent)
- reactjs - firebase.storage 不是函数
- python - 涉及副作用的 Python 编程
- node.js - 我该如何修复这个 npm start 命令?