欢迎访问宙启技术站
智能推送

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协议的安全通信。