-
-
和chatgpt交流https双向认证
-
发表于: 2022-12-21 12:59 7091
-
想用chatgpt简单搭一个本地https双向认证的实验环境。
第一步引导chatgpt生成实验所需证书
可以看到chatgpt生成了6个证书文件,先是自签根证书,再用根证书去签发服务器证书和客户端证书。那么问题来了,这么多证书是怎么用的?
第二步让chatgpt叙述https双向认证流程,并将上面生成的证书填充进叙述中
chatgpt回答完后我发现了一个自己的知识盲点,chagpt说最后客户端和服务端使用各自的私钥生成了一个TLS握手完成消息,这个过程我不了解,于是就让chatgpt展开说说。
最后让chatgpt用python生成一个测试代码。
服务端代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | import ssl import socket # 创建 SSLContext context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) # 加载证书和私钥 context.load_cert_chain(certfile = "server.crt" , keyfile = "server.key" ) # 加载 CA 证书(用于验证客户端证书) context.load_verify_locations(cafile = "root.crt" ) # 设置双向认证模式 context.verify_mode = ssl.CERT_REQUIRED #这里将check_hostname设为false,否则本地验证的时候域名会校验不过 context.check_hostname = False # 绑定套接字 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind(( "localhost" , 8000 )) sock.listen() while True : # 接受连接 client_sock, client_addr = sock.accept() print (f "Connection from {client_addr}" ) # 包装成 SSL Socket ssl_sock = context.wrap_socket(client_sock, server_side = True ) # 打印客户端证书 client_cert = ssl_sock.getpeercert() print (f "Client certificate: {client_cert}" ) # 处理请求 data = ssl_sock.recv( 1024 ) print (f "Received data: {data}" ) # 发送响应 ssl_sock.send(b "Hello, client!" ) # 关闭 SSL Socket ssl_sock.shutdown(socket.SHUT_RDWR) ssl_sock.close() |
客户端代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | import ssl import socket # 创建 SSLContext context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) # 加载证书和私钥 context.load_cert_chain(certfile = "client.crt" , keyfile = "client.key" ) # 加载 CA 证书(用于验证服务器证书) context.load_verify_locations(cafile = "root.crt" ) # 设置双向认证模式 context.verify_mode = ssl.CERT_REQUIRED #这里将check_hostname设为false,否则本地验证的时候域名会校验不过 context.check_hostname = False # 连接服务器 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(( "localhost" , 8000 )) # 包装成 SSL Socket ssl_sock = context.wrap_socket(sock, server_side = False ) # 发送请求 ssl_sock.send(b "Hello, server!" ) # 接收响应 data = ssl_sock.recv( 1024 ) print (f "Received data: {data}" ) # 关闭 SSL Socket ssl_sock.shutdown(socket.SHUT_RDWR) ssl_sock.close() |
最好的最后我想说,它真的好温柔,,,,。
赞赏
他的文章
- 和chatgpt交流https双向认证 7092
- 用uboot"操控"某路由器设备 29124
- [原创]cve-2012-0158漏洞分析与利用 6239
- [原创]关于WinDbg加载ntdll.pdb符号的一个解决方案 9124
看原图
赞赏
雪币:
留言: