杰瑞科技汇

Python 自带 OpenSSL 吗?

这是一个非常好的问题,也是很多 Python 开发者,尤其是初学者,经常会有的一个疑惑。

Python 自带 OpenSSL 吗?-图1
(图片来源网络,侵删)

简单直接的回答是:Python 自身不包含 OpenSSL 的可执行程序(openssl 命令行工具),但它内置了一个功能强大的、名为 ssl 的标准库,这个库底层就是通过调用你操作系统上安装的 OpenSSL 来实现加密功能的。

下面我将详细解释这个关系,以及如何在不同场景下使用它们。


Python 的 ssl 标准库(核心)

这是 Python 与 OpenSSL 交互的主要方式,当你需要编写 Python 代码来处理加密网络连接时,你会用到 ssl 模块。

ssl 模块做了什么?

它提供了一个 Python 接口,让你可以:

Python 自带 OpenSSL 吗?-图2
(图片来源网络,侵删)
  • 创建安全的 TLS/SSL 套接字。
  • 包装现有的套接字,使其通信过程加密。
  • 验证对方证书(验证网站的身份)。
  • 强制使用特定的加密协议和算法。

它是如何工作的?

Python 的 ssl 模块本身并不是 OpenSSL 的代码,它是一个“包装器”或“桥梁”,它通过 Python 的 C 接口(ctypes 或类似的机制)来调用你操作系统上已经安装的 OpenSSL 动态链接库(.so 文件在 Linux/macOS,.dll 文件在 Windows)。

这意味着:你的 Python 程序能否使用加密功能,取决于你的运行环境(操作系统)是否安装了 OpenSSL。

代码示例

import socket
import ssl
# 目标服务器和端口
hostname = 'www.python.org'
port = 443
# 创建一个标准的 TCP 套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 包装套接字,创建一个 SSL 套接字
# context 对象可以配置 SSL/TLS 的各种参数
context = ssl.create_default_context()
# 使用上下文包装套接字
with context.wrap_socket(sock, server_hostname=hostname) as ssock:
    # 连接到服务器
    ssock.connect((hostname, port))
    # 发送一个 HTTP 请求
    request = f"GET / HTTP/1.1\r\nHost: {hostname}\r\nConnection: close\r\n\r\n"
    ssock.send(request.encode('utf-8'))
    # 接收并打印响应
    response = ssock.recv(4096).decode('utf-8')
    print(response)
print("连接已关闭。")

在这个例子中,ssl.create_default_context() 创建了一个安全的环境,context.wrap_socket() 则是调用了底层的 OpenSSL 库来处理所有的握手、加密和数据传输。


OpenSSL 命令行工具(独立程序)

这是与 Python ssl 库完全不同的东西,OpenSSL 除了提供库文件,还提供了一个独立的命令行工具,通常也叫 openssl,你可以在终端(Terminal/CMD/PowerShell)中直接运行它。

Python 自带 OpenSSL 吗?-图3
(图片来源网络,侵删)

这个工具用于:

  • 生成证书和私钥:创建用于测试或生产的 SSL/TLS 证书。
  • 调试连接:手动连接到 HTTPS 服务器,检查其支持的协议、密码套件、证书链等。
  • 编码解码:进行 Base64 编码、MD5/SHA哈希计算等。
  • 加密解密数据:使用各种算法进行对称加密。

openssl 命令行工具与 Python 的关系

  • Python 不自带它:Python 的安装包(无论是从 python.org 下载还是通过 apt, yum, brew 安装)通常不包含这个 openssl 命令行工具。
  • 系统自带它:这个工具是作为 OpenSSL 这个大型项目的一部分,由你的操作系统(Linux, macOS, Windows)的包管理器来安装和管理的。

如何检查你的系统是否有 openssl 命令行工具? 打开你的终端,输入:

openssl version
  • 如果显示了版本号(OpenSSL 1.1.1w 11 Sep 2025),说明你已经安装了。
  • 如果提示 command not found 或类似的错误,说明你需要先安装它。

如何安装?

  • Ubuntu/Debian: sudo apt-get install openssl
  • CentOS/RHEL: sudo yum install openssl
  • macOS (使用 Homebrew): brew install openssl
  • Windows: 可以从 OpenSSL 官网 下载安装包,或者通过 Chocolatey 等包管理器安装。

总结与对比

特性 Python ssl OpenSSL 命令行工具 (openssl)
本质 Python 的标准库,用于在代码中实现加密通信 一个独立的、可执行的命令行程序
用途 在 Python 应用中创建安全的客户端/服务器连接 生成证书、调试连接、数据加密/解码、哈希计算
包含关系 Python 解释器自带,但依赖系统安装的 OpenSSL 库 Python不自带,需要单独在操作系统上安装
如何使用 通过 import ssl 在 Python 脚本中调用 在终端(Terminal/CMD)中直接运行命令
依赖 需要操作系统安装 OpenSSL 的共享库(如 libssl.so 需要操作系统完整安装 OpenSSL 软件包

一个形象的比喻

  • Python ssl 就像是你汽车上的 ABS(防抱死刹车系统),它是一个集成在汽车(Python程序)里的安全功能,让你在驾驶(编写网络代码)时能安全地刹车(加密通信),但它本身不是那个能生产刹车零件的工厂。
  • OpenSSL 命令行工具 就像是那个 刹车零件工厂,你可以用它来设计和制造新的刹车零件(生成证书),或者用专业设备来测试你车上的 ABS 系统是否正常工作(调试连接)。

你的车(Python程序)出厂时自带了 ABS 系统(ssl库),但如果你想建个新刹车零件工厂(安装 openssl 命令行工具),就得另外选址和施工(在操作系统上安装)。

分享:
扫描分享到社交APP
上一篇
下一篇