模块介绍
Python 的 ssl
库是一个用于处理安全套接字层(SSL)和传输层安全(TLS)的模块。它主要用于在网络连接中提供加密、认证和数据完整性。ssl
库适配于 Python 3 的所有版本,是标准库中的一部分,无需额外安装。
应用场景
ssl
库广泛应用于多个领域,包括但不限于:
- Web 服务器和客户端:用于在服务器和客户端之间创建安全通信通道。
- 电子邮件传输:用于通过安全的 SMTP、IMAP 等协议传输电子邮件。
- API 调用:保护 API 的网络调用,确保数据传输的应用安全。
- 身份验证和授权:通过 SSL/TLS 认证机制验证用户身份。
- 保护敏感数据:在传输金融信息、个人敏感数据等需要高度保护的信息时,使用 ssl 库进行加密。
安装说明
ssl
是 Python 标准库中的一部分,无需单独安装。只需确保使用的 Python 版本支持该模块即可。确认方式有如下示例:
1 2 3
| import ssl
print(ssl.OPENSSL_VERSION)
|
用法举例
下面提供了几个具体的用法示例,以便更好地理解如何使用 ssl
模块实现不同的功能。
示例 1:创建安全的 SSL 服务器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| import ssl import socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind(('localhost', 10023)) server_socket.listen(5)
context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH) context.load_cert_chain(certfile='cert.pem', keyfile='key.pem')
conn, addr = server_socket.accept() ssl_conn = context.wrap_socket(conn, server_side=True) try: data = ssl_conn.recv(1024) print(f"Received: {data.decode('utf-8')}") ssl_conn.sendall(b"Hello, SSL!") finally: ssl_conn.close()
|
示例 2:创建安全的 SSL 客户端
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| import ssl import socket
context = ssl.create_default_context()
server_address = ('localhost', 10023) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) ssl_sock = context.wrap_socket(sock, server_hostname='localhost') ssl_sock.connect(server_address)
try: ssl_sock.sendall(b'Hello, server!') data = ssl_sock.recv(1024) print(f"Received: {data.decode('utf-8')}") finally: ssl_sock.close()
|
示例 3:验证服务器证书有效期限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| import ssl import socket from datetime import datetime
context = ssl.create_default_context()
server_address = ('www.example.com', 443) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) ssl_sock = context.wrap_socket(sock, server_hostname='www.example.com') ssl_sock.connect(server_address)
cert = ssl_sock.getpeercert() not_after = cert['notAfter'] expiry_date = datetime.strptime(not_after, '%b %d %H:%M:%S %Y %Z') current_date = datetime.utcnow() print(f"Certificate valid until: {expiry_date}") print(f"Days remaining: {(expiry_date - current_date).days}")
ssl_sock.close()
|
强烈建议大家关注我的博客 —— 全糖冲击博客,优点在于我们提供了包括 Python 标准库在内的所有高级使用教程,这些教程不仅系统全面,而且有详细的示例代码展示实际应用场景。关注我的博客,您将能够获取一手的技术资讯、解锁更多编程技巧,并在学习和应用中不断进步。感谢您的支持!
软件版本可能变动
如果本文档不再适用或有误,请留言或联系我进行更新。让我们一起营造良好的学习氛围。感谢您的支持! - Travis Tang