如何生成含TLS_AES_128_GCM_SHA256的自签名证书用于Python Web服务器
创建指定加密套件的自签名证书并部署到Python Web服务器
一、生成符合要求的自签名证书
使用OpenSSL命令生成兼容TLS_AES_128_GCM_SHA256加密套件的自签名证书(该套件属于TLS 1.3标准,需确保OpenSSL版本支持TLS 1.3):
# 创建存放证书的目录(如果不存在) mkdir -p ssl # 生成2048位RSA私钥 openssl genrsa -out ssl/key.pem 2048 # 生成证书签名请求(CSR),按提示填写信息即可,部分字段可留空 openssl req -new -key ssl/key.pem -out ssl/cert.csr # 基于CSR生成自签名证书,指定SHA256签名算法,有效期365天 openssl x509 -req -days 365 -in ssl/cert.csr -signkey ssl/key.pem -out ssl/cert.crt -sha256
二、修正后的Python Web服务器代码
原代码存在几处问题(如socket参数不规范、协议版本不匹配、多余的self引用、缺少请求处理逻辑),以下是修正并完善后的代码:
from socket import AF_INET, SOCK_STREAM import ssl # 初始化TLS 1.3上下文,确保支持目标加密套件 ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_3) # 强制服务器仅使用TLS_AES_128_GCM_SHA256加密套件 ssl_context.set_ciphers('TLS_AES_128_GCM_SHA256') # 加载证书和私钥 ssl_context.load_cert_chain(certfile="ssl/cert.crt", keyfile="ssl/key.pem") # 创建TCP socket并绑定端口 server_socket = socket(AF_INET, SOCK_STREAM) server_socket.bind(("0.0.0.0", 443)) server_socket.listen(5) print("SSL服务器已启动,等待连接...") while True: conn, addr = server_socket.accept() print(f"收到来自 {addr} 的连接请求") try: # 将普通TCP连接包装为SSL连接 ssl_conn = ssl_context.wrap_socket(conn, server_side=True) # 读取客户端请求 request_data = ssl_conn.recv(1024).decode('utf-8') print(f"请求内容:\n{request_data}") # 返回HTTP响应 response = "HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=utf-8\r\n\r\n<h1>SSL连接成功!使用加密套件:TLS_AES_128_GCM_SHA256</h1>" ssl_conn.send(response.encode('utf-8')) except Exception as e: print(f"连接处理出错: {str(e)}") finally: # 关闭SSL连接 ssl_conn.close()
关键修正说明
- 使用
PROTOCOL_TLSv1_3协议版本,确保支持TLS 1.3专属的TLS_AES_128_GCM_SHA256加密套件 - 通过
set_ciphers强制限定仅使用目标加密套件 - 用可读性更强的
AF_INET、SOCK_STREAM替代原代码中的数字参数 - 移除了无意义的
self引用 - 添加了基础的请求读取和响应返回逻辑,让服务器具备基本功能
内容的提问来源于stack exchange,提问作者Mahdi Khezrabadi
相关产品推荐
相关产品推荐

