python socketserver模块开启ssl双向认证

server端代码如下

复制代码
import socketserver
import ssl

# 需要校验客户端
ssl_context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
# 发给客户端
ssl_context.load_cert_chain(certfile="./server.crt", keyfile="./server.key")
# 信任库
ssl_context.load_verify_locations(./ca.crt")
ssl_context.verify_mode=ssl.CERT_REQUIRED
# 检查主机名是否与提供的证书中的主机名匹配
ssl_context.check_hostname=False



class MyHandler(socketserver.BaseRequestHandler):
    def handle(self):
        # 接收客户端的数据
        data = self.request.recv(1024).strip()
        print(f'Received from client: {data.decode()}')
        # 发送响应给客户端
        response = b'Hello, Client!'
        self.request.sendall(response)


if __name__ == '__main__':
    server = socketserver.TCPServer(('0.0.0.0', 1234), MyHandler)
    server.socket = ssl_context.wrap_socket(server.socket, server_side=True)
    server.serve_forever()

client端代码如下

复制代码
import socket
import ssl

# 定义服务器的地址和端口
server_address = ('localhost', 1234)
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS)
ssl_context.check_hostname = False
# 加载证书链,用于发给对端,相当于keystore
ssl_context.load_cert_chain(certfile="./server.crt", keyfile="./server.key")
ssl_context.verify_mode=ssl.CERT_REQUIRED
# trustStore
ssl_context.load_verify_locations(cafile="D:\code\Quantity\ca.crt")
# 创建一个TCP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
csocket = ssl_context.wrap_socket(client_socket, server_side=False)
try:
    # 连接到服务器
    csocket.connect(server_address)

    # 发送数据给服务器
    data = b'Hello, Server!'
    csocket.sendall(data)

    # 接收服务器的响应数据
    response = csocket.recv(1024)
    print('Received from server:', response.decode())
finally:
    # 关闭客户端套接字
    csocket.close()

双向认证证书生成:https://blog.csdn.net/u014644574/article/details/126190061

相关推荐
昊昊昊昊昊明3 分钟前
10天学会嵌入式技术之51单片机-day-7
linux·运维·网络
@正在学习驰骋的小马18 分钟前
九、小白如何用Pygame制作一款跑酷类游戏(添加前进小动物作为动态障碍物)
python·游戏·pygame
达斯维达的大眼睛19 分钟前
如何在Linux用libevent写一个聊天服务器
linux·运维·服务器·网络
BXCQ_xuan24 分钟前
Django API 响应格式:一个新手踩坑记
python·django·状态模式
Python×CATIA工业智造27 分钟前
基于CATIA参数化管道建模的自动化插件开发实践——NX建模之管道命令的参考与移植
python·pycharm·catia二次开发
Zhuai-行淮31 分钟前
施磊老师基于muduo网络库的集群聊天服务器(七)
服务器·网络·php
蔗理苦1 小时前
2025-04-24 Python&深度学习4—— 计算图与动态图机制
开发语言·pytorch·python·深度学习·计算图
Sunlight_7772 小时前
第六章 QT基础:5、QT的UDP网络编程
网络·qt·udp
virelin_Y.lin4 小时前
系统与网络安全------弹性交换网络(2)
网络·安全·web安全·链路聚合·lacp·eth-trunk
mutianhao10244 小时前
SQLAlchemy 2.x 异步查询方法比较
python·mysql·sqlalchemy