socket加密通信编程python
时间: 2023-09-05 21:08:42 浏览: 109
实现 socket 加密通信的一种常见方式是使用 SSL/TLS 协议。Python 的标准库中提供了 `ssl` 模块,可以方便地实现 SSL/TLS 加密通信。下面是一个简单的示例代码:
服务端代码:
```python
import socket
import ssl
# 创建 TCP socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定地址和端口
server_address = ('localhost', 8000)
server_socket.bind(server_address)
# 监听连接
server_socket.listen()
# 接受连接并使用 SSL 包装 socket
while True:
client_socket, client_address = server_socket.accept()
ssl_client_socket = ssl.wrap_socket(client_socket, server_side=True, certfile='server.crt', keyfile='server.key')
# 处理客户端请求
data = ssl_client_socket.recv(1024)
print('Received:', data.decode())
ssl_client_socket.sendall('Hello, client!'.encode())
# 关闭 SSL socket
ssl_client_socket.close()
```
客户端代码:
```python
import socket
import ssl
# 创建 TCP socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 使用 SSL 包装 socket
ssl_client_socket = ssl.wrap_socket(client_socket, cert_reqs=ssl.CERT_REQUIRED, ca_certs='server.crt')
# 连接服务器
server_address = ('localhost', 8000)
ssl_client_socket.connect(server_address)
# 发送数据并接收响应
ssl_client_socket.sendall('Hello, server!'.encode())
data = ssl_client_socket.recv(1024)
print('Received:', data.decode())
# 关闭 SSL socket
ssl_client_socket.close()
```
在上面的示例中,服务端使用了自签名的证书,客户端需要验证服务端的证书,如果验证失败会抛出异常。实际应用中,可以使用 CA 颁发的证书或自己颁发的证书,并将 CA 证书导入到客户端的信任列表中,以便客户端可以验证服务端的证书。