-
-
和chatgpt交流https双向认证
-
发表于: 2022-12-21 12:59 7346
-
想用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 sslimport socket# 创建 SSLContextcontext = 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 sslimport socket# 创建 SSLContextcontext = 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 Socketssl_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 Socketssl_sock.shutdown(socket.SHUT_RDWR)ssl_sock.close() |
最好的最后我想说,它真的好温柔,,,,。
赞赏
他的文章
- 和chatgpt交流https双向认证 7347
- 用uboot"操控"某路由器设备 30166
- [原创]cve-2012-0158漏洞分析与利用 6683
- [原创]关于WinDbg加载ntdll.pdb符号的一个解决方案 10426
赞赏
雪币:
留言: