Python中ssl()的服务器端与客户端使用示例
发布时间:2023-12-15 13:54:09
Python提供了ssl模块用于在网络通信中进行SSL/TLS协议的加密和身份验证。ssl模块可以用于构建服务器端和客户端程序,下面将分别介绍它们的使用示例。
服务器端示例:
import socket
import ssl
# 创建Socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 8000))
server_socket.listen(1)
# 加载证书和密钥文件
context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
context.load_cert_chain(certfile='server.crt', keyfile='server.key')
# 等待客户端连接
print("等待客户端连接...")
connection, address = server_socket.accept()
print("接受来自{}的连接".format(address))
# 创建安全套接字
secure_socket = context.wrap_socket(connection, server_side=True)
try:
# 接收客户端发送的数据
data = secure_socket.recv(1024)
print("收到消息:", data.decode())
# 发送响应给客户端
message = "Hello from server!"
secure_socket.send(message.encode())
finally:
# 关闭安全套接字和服务端Socket
secure_socket.close()
server_socket.close()
以上代码首先创建了一个普通的服务器Socket对象,并在指定端口上监听客户端的连接请求。在加载证书和密钥文件时,使用ssl.create_default_context方法创建一个TLS上下文,并使用load_cert_chain方法加载服务器的证书和私钥。
接着,等待客户端连接并创建一个安全套接字,将接受到的连接包装到这个安全套接字上。之后,使用recv方法接收客户端发送的数据,并使用send方法发送响应给客户端。
最后,关闭套接字和服务器Socket。
客户端示例:
import socket
import ssl
# 创建Socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 加载服务器端证书
context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH)
context.load_verify_locations(cafile='server.crt')
# 连接服务器
secure_socket = context.wrap_socket(client_socket, server_hostname='localhost')
secure_socket.connect(('localhost', 8000))
try:
# 发送消息给服务器
message = "Hello from client!"
secure_socket.send(message.encode())
# 接收服务器端的响应
response = secure_socket.recv(1024)
print("收到响应:", response.decode())
finally:
# 关闭安全套接字和客户端Socket
secure_socket.close()
client_socket.close()
以上代码首先创建了一个普通的客户端Socket对象,并加载服务器端的证书。在连接服务器时,使用ssl.wrap_socket方法将客户端Socket包装成安全套接字,并指定服务器的主机名。
接着,使用send方法发送一条消息给服务器,并使用recv方法接收服务器端的响应。
最后,关闭套接字和客户端Socket。
以上是Python中ssl模块的服务器端和客户端的使用示例,通过这些示例可实现基于SSL/TLS协议的安全通信。
