Python中ssl()库的介绍及使用示例
发布时间:2023-12-15 13:51:51
SSL(Secure Sockets Layer)是一种基于加密的安全通信协议,用于网络通信的安全性加强。在Python中,可以使用ssl模块来实现SSL协议的功能。
ssl模块提供了许多函数和类,用于创建SSL/TLS连接、验证证书、加密数据、发送和接收网络数据等。下面是ssl模块的一些常用函数和类:
1. ssl.wrap_socket():创建一个SSL/TLS连接的套接字。
使用示例:
import ssl import socket # 创建TCP套接字 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建SSL/TLS连接的套接字 ssl_sock = ssl.wrap_socket(sock)
2. ssl.get_default_verify_paths():获取默认的证书验证路径。
使用示例:
import ssl # 获取默认的证书验证路径 default_paths = ssl.get_default_verify_paths() # 打印证书验证路径 print(default_paths.cafile) # CA证书文件路径 print(default_paths.capath) # CA证书目录路径
3. ssl.CERT_NONE:代表不验证服务器证书。
使用示例:
import ssl import socket # 创建TCP套接字 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建不验证服务器证书的SSL/TLS连接的套接字 ssl_sock = ssl.wrap_socket(sock, cert_reqs=ssl.CERT_NONE)
4. ssl.CERT_REQUIRED:代表强制验证服务器证书。
使用示例:
import ssl import socket # 创建TCP套接字 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建强制验证服务器证书的SSL/TLS连接的套接字 ssl_sock = ssl.wrap_socket(sock, cert_reqs=ssl.CERT_REQUIRED)
5. ssl.load_cert_chain():加载证书和私钥文件。
使用示例:
import ssl import socket # 创建TCP套接字 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 加载证书和私钥文件 ssl_sock = ssl.wrap_socket(sock, keyfile='private_key.pem', certfile='certificate.pem')
使用示例1:实现基于SSL/TLS的简单的客户端和服务器通信。
服务器端代码:
import ssl
import socket
# 创建TCP套接字
server_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定地址和端口
server_sock.bind(('localhost', 8000))
# 监听连接
server_sock.listen(1)
# 等待客户端连接
client_sock, client_addr = server_sock.accept()
# 创建SSL/TLS连接的套接字
ssl_sock = ssl.wrap_socket(client_sock, server_side=True, certfile='certificate.pem', keyfile='private_key.pem')
# 接收客户端发送的数据
data = ssl_sock.recv(1024)
# 打印接收到的数据
print(data.decode())
# 关闭套接字
ssl_sock.close()
server_sock.close()
客户端代码:
import ssl
import socket
# 创建TCP套接字
client_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 创建SSL/TLS连接的套接字
ssl_sock = ssl.wrap_socket(client_sock)
# 连接服务器
ssl_sock.connect(('localhost', 8000))
# 发送数据
ssl_sock.send('Hello, server!'.encode())
# 关闭套接字
ssl_sock.close()
使用示例2:验证服务器证书。
import ssl
import socket
# 创建TCP套接字
client_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 创建需要验证服务器证书的SSL/TLS连接的套接字
ssl_sock = ssl.wrap_socket(client_sock, cert_reqs=ssl.CERT_REQUIRED, ca_certs='ca_certificate.pem')
# 连接服务器
ssl_sock.connect(('localhost', 8000))
# 打印服务器证书
print(ssl_sock.getpeercert())
# 关闭套接字
ssl_sock.close()
以上是ssl模块的一些简单介绍和使用示例,希望对你有帮助!
