当前位置:首页>python>Python学习【120】:互联网安全的基石openssl介绍及python实现示例

Python学习【120】:互联网安全的基石openssl介绍及python实现示例

  • 2026-09-07 22:19:04
Python学习【120】:互联网安全的基石openssl介绍及python实现示例

Python学习

一、学前花絮

今天是2026.2.17,农历是马年的大年初一,也是春节。一年一度的节日,家庭聚会、家乡民俗等等,让人觉得2025年终于过去了,期待这2026年有好的运势。那就从学习Python开始吧……
我们之前的文章探讨了关于python爬虫的问题,涉及技术实现和合规合法等多方面。特别是在合规爬取天气数据的时候,一般都要经过网站的注册、API-Key、公私钥加密等等的过程,之所以有这个过程,本质上就是为了保证网站本身不被恶意攻击,此外让合规的爬取数据留下痕迹便于出现问题后的追溯。
我们也借着身份验证这个话题,提到了数据安全领域很重要的公私钥、国际/国内加密算法方面的问题。今天继续这个话题,毕竟在大数据、人工智能时代,应用技术是一方面,而合理保护数据安全也是很重要的。

二、openssl介绍及python实现示例

2.1 openssl介绍

OpenSSL 是互联网安全的基石,你可以把它理解为一个功能强大的“网络安全工具箱”。简单来说,它是一个开源的软件库,主要用于实现加密通信协议(如 SSL/TLS),并提供各种加密功能。
为了更全面地了解它,从定义、核心构成和主要用途三个方面详细拆解。

1. OpenSSL 是什么?(定义)

OpenSSL 的定义可以从两个层面来理解:
作为一个库:它是用 C 语言编写的开源密码学库。软件开发者可以将它集成到自己的应用程序中(如 Web 服务器、邮件客户端),从而赋予这些软件“加密通信”的能力。
作为一个工具:它提供了一套强大的命令行工具(openssl 命令)。系统管理员和开发者可以直接在终端中使用它来执行各种加密操作,例如生成密钥、创建证书、加密文件等。
一句话总结: OpenSSL 是一个开源的、功能完备的加密工具包,实现了 SSL/TLS 协议,并提供了丰富的密码学算法。

2. 它的核心构成是什么?

OpenSSL 的软件包虽然庞大,但主要可以分为三个核心部分:
libcrypto (底层加密库):
这是 OpenSSL 的基础。它实现了各种具体的密码学算法,包括对称加密(如 AES)、非对称加密(如 RSA)、哈希算法(如 SHA-256)等。任何需要加密功能的程序都可以调用这个库。
libssl (SSL/TLS 协议库):
这个库建立在 libcrypto 之上,专门负责实现 SSL 和 TLS 协议。它处理了建立安全连接时的握手、密钥交换、身份认证等复杂过程。
命令行工具 (OpenSSL CLI):
这是我们直接与 OpenSSL 交互的接口。通过输入 openssl [command],我们可以方便地进行证书管理、密钥生成、数据加密解密等操作。

3. OpenSSL 有什么用途?

OpenSSL 的应用场景极其广泛,几乎涵盖了所有需要网络安全的领域。它的主要用途包括:

实现安全通信 (SSL/TLS)

这是 OpenSSL 最核心的用途。它为互联网上的数据传输提供了机密性(防窃听)、完整性(防篡改)和身份认证(防冒充)。
HTTPS 网站:当你访问一个以 https:// 开头的网站时,浏览器与服务器之间就是通过 OpenSSL(或其衍生实现)建立的加密通道进行通信的。
VPN:许多虚拟专用网络软件使用 OpenSSL 来建立安全的加密隧道。
电子邮件:用于加密邮件传输(如 SMTPS, IMAPS),防止邮件内容在传输过程中被截获。

证书管理 (PKI)

OpenSSL 是管理公钥基础设施(PKI)的得力助手,常用于:
生成密钥对:创建 RSA、ECC 等非对称加密算法的公钥和私钥。
创建证书签名请求 (CSR):当你需要向证书颁发机构(CA)申请正式证书时,通常先用 OpenSSL 生成 CSR 文件。
生成自签名证书:用于内部测试、开发环境或个人网站,无需向商业 CA 付费。
证书格式转换:在不同的证书格式之间进行转换(如 PEM 转 PFX),以适应不同的服务器环境。

数据加密与解密

除了建立通道,OpenSSL 还可以直接对数据进行处理:
文件加密:使用对称加密算法(如 AES)加密本地文件,保护敏感数据。
计算哈希值:使用 MD5、SHA 等算法生成文件的“数字指纹”,用于校验文件完整性。

其他功能

随机数生成:生成高质量的加密安全随机数,这在生成密钥和盐值时至关重要。
安全测试:使用 openssl s_client 命令可以测试服务器的 SSL/TLS 配置是否正确,或者模拟客户端连接。

以上内容的总结

OpenSSL 是一个开源的加密工具包,它既是SSL/TLS 协议的实现者(保障网络传输安全),也是密码学算法的集合体(提供加密、签名、摘要等功能),同时还是一个实用的命令行工具(方便管理员管理密钥和证书)。无论是大型企业的服务器,还是你本地的开发环境,OpenSSL 都在默默地守护着数据的安全。

2.2 python的cryptography库实现openssl示例

1.准备工作

首先需要安装核心库:
pip install cryptography PyJWT

场景一:非对称加密 (替代 openssl genrsa / rsa)

用途:生成密钥对,用于数字签名或加密小数据。
输出如下:
以上是私钥,而公钥是私钥的衍生品。但反向不成立,就是说能从私钥推出公钥,而公钥无法得到私钥。这也是非对称加密算法的一大特点:

场景二:生成自签名证书 (替代 openssl req -x509)

用途:生成 HTTPS 证书或用于测试的 CA 证书。
依据公钥、私钥生成CA证书,输出结果:

场景三:数据加密与解密 (替代 openssl enc)

用途:加密文件或敏感信息。

使用公钥加密 (非对称)

输出结果:

使用密码加密 (对称 - Fernet)

输出结果:

场景四:数字签名 (替代 openssl dgst -sign)

用途:验证文件完整性或身份认证。
输出结果:

场景五:生成 JWT Token (替代手动拼接 Header.Payload.Signature)

用途:API 接口的身份认证(比如之前遇到的和风天气 API)。
输出结果:

2.3  深度对比:Python 库 vs. OpenSSL 命令行

其实,细心的朋友会发现一个有意思的问题,我们在前面的文章中提到openssl可以在linux或者windows下的wsl命令行用一条命令即可生成公钥、私钥。那么python的cryptography库这么复杂有什么用?其实无论是openssl还是python库本质上都是对libcrypto.so的调用和封装。尽管python可以处理.so动态链接库,但因为libcrypto.so非常复杂,如果python程序直接调用会很麻烦甚至有风险,所以聪明的python专家就对libcrypto.so进行了封装形成了cryptography库,方便python程序的调用。
而上面的表格,其实再说命令行是手工行为,程序调用才是自动化。Python之所以受众多,也是因为有那么多的人做了那么多好用的库。

2.4以上内容的总结

通过 Python 的 cryptography 和 PyJWT 库,你可以完全在代码中实现 OpenSSL 命令行的功能:
密钥管理:用 Python 生成 RSA 密钥对,无需依赖外部 .pem 文件(或动态生成)。
证书操作:在代码中动态创建自签名证书,适用于自动化测试。
加解密:直接对传输的数据进行加密或签名,保障数据安全。
API 认证:生成 JWT Token,轻松对接现代 RESTful API。
这样做的好处是自动化和集成化,不需要在服务器上安装 OpenSSL,也不需要通过 subprocess 去调用命令行,所有逻辑都在 Python 代码中完成。

三、小结

本文专门对openssl及python实现进行了论述,虽然文章可能有点晦涩了,但本质上是在说明一个当前互联网行业的一个问题:使用方便与数据安全。互联网的发展,确实让人们之间的沟通和信息交换便利很多,但也带来了安全问题。Openssl就是为了解决数据安全的基石,而python是好用的工具。
让我们保持学习热情,多做练习。我们下期再见!

最新文章

随机文章