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

Python中如何使用ssl()进行加密通信

发布时间:2023-12-15 13:48:51

Python中可以使用ssl(Secure Sockets Layer)来进行加密通信。ssl是一种常用的加密通信协议,能够保证通信的机密性和完整性,防止信息被窃取或篡改。

下面是一个使用ssl进行加密通信的示例代码:

import ssl
import socket

# 创建SSL上下文
context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)

# 加载服务器证书
context.load_cert_chain(certfile="server.crt", keyfile="server.key")

# 创建TCP服务端socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定IP和端口
server_socket.bind(("127.0.0.1", 8080))

# 监听
server_socket.listen()

while True:
    # 接受客户端连接
    client_socket, addr = server_socket.accept()
    
    # 将TCP套接字封装为SSL套接字
    ssl_socket = context.wrap_socket(client_socket, server_side=True)
    
    # 接收客户端数据
    data = ssl_socket.recv(1024)
    
    # 模拟服务器处理数据
    processed_data = data.decode().upper().encode()
    
    # 发送处理后的数据给客户端
    ssl_socket.send(processed_data)
    
    # 关闭连接
    ssl_socket.close()
    client_socket.close()

上述代码首先使用ssl.create_default_context()函数创建了一个默认的SSL上下文,然后使用context.load_cert_chain()加载了服务器证书和私钥。然后创建了一个TCP服务端socket并绑定IP和端口。接下来进入循环,等待客户端的连接。

当有客户端连接时,代码会接受客户端连接并将TCP套接字封装为SSL套接字,使用context.wrap_socket()函数实现。之后可以通过SSL套接字收发数据。上述代码中,将接收到的数据转换为大写并发送给客户端。

最后需要关闭SSL套接字和TCP套接字,释放资源。

在客户端使用SSL进行加密通信的代码如下:

import ssl
import socket

# 创建SSL上下文
context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH)

# 指定验证服务器证书
context.load_verify_locations(cafile="server.crt")

# 创建TCP客户端socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接服务器
client_socket.connect(("127.0.0.1", 8080))

# 将TCP套接字封装为SSL套接字
ssl_socket = context.wrap_socket(client_socket, server_hostname="127.0.0.1")

# 发送数据给服务器
ssl_socket.send(b"Hello, server!")

# 接收服务器响应
data = ssl_socket.recv(1024)

# 打印服务器响应
print(data.decode())

# 关闭连接
ssl_socket.close()
client_socket.close()

上述代码首先使用ssl.create_default_context()函数创建了一个默认的SSL上下文,然后使用context.load_verify_locations()指定要验证的服务器证书。然后创建了一个TCP客户端socket,并连接到服务器。

接下来,代码将TCP套接字封装为SSL套接字,使用context.wrap_socket()函数实现。然后发送数据给服务器并接收服务器的响应。

最后需要关闭SSL套接字和TCP套接字,释放资源。

通过上述示例代码,可以在Python中使用ssl进行加密通信。其中服务器和客户端需要分别加载自己的证书和私钥,可以通过ssl.create_default_context()函数创建SSL上下文,使用context.load_cert_chain()加载证书和私钥。客户端还可以指定要验证的服务器证书,使用context.load_verify_locations()函数加载服务器证书。