Python学习【120】:互联网安全的基石openssl介绍及python实现示例
Python学习
一、学前花絮
今天是2026.2.17,农历是马年的大年初一,也是春节。一年一度的节日,家庭聚会、家乡民俗等等,让人觉得2025年终于过去了,期待这2026年有好的运势。那就从学习Python开始吧……我们之前的文章探讨了关于python爬虫的问题,涉及技术实现和合规合法等多方面。特别是在合规爬取天气数据的时候,一般都要经过网站的注册、API-Key、公私钥加密等等的过程,之所以有这个过程,本质上就是为了保证网站本身不被恶意攻击,此外让合规的爬取数据留下痕迹便于出现问题后的追溯。我们也借着身份验证这个话题,提到了数据安全领域很重要的公私钥、国际/国内加密算法方面的问题。今天继续这个话题,毕竟在大数据、人工智能时代,应用技术是一方面,而合理保护数据安全也是很重要的。二、openssl介绍及python实现示例
2.1 openssl介绍
OpenSSL 是互联网安全的基石,你可以把它理解为一个功能强大的“网络安全工具箱”。简单来说,它是一个开源的软件库,主要用于实现加密通信协议(如 SSL/TLS),并提供各种加密功能。为了更全面地了解它,从定义、核心构成和主要用途三个方面详细拆解。1. OpenSSL 是什么?(定义)
作为一个库:它是用 C 语言编写的开源密码学库。软件开发者可以将它集成到自己的应用程序中(如 Web 服务器、邮件客户端),从而赋予这些软件“加密通信”的能力。作为一个工具:它提供了一套强大的命令行工具(openssl 命令)。系统管理员和开发者可以直接在终端中使用它来执行各种加密操作,例如生成密钥、创建证书、加密文件等。一句话总结: OpenSSL 是一个开源的、功能完备的加密工具包,实现了 SSL/TLS 协议,并提供了丰富的密码学算法。2. 它的核心构成是什么?
OpenSSL 的软件包虽然庞大,但主要可以分为三个核心部分:这是 OpenSSL 的基础。它实现了各种具体的密码学算法,包括对称加密(如 AES)、非对称加密(如 RSA)、哈希算法(如 SHA-256)等。任何需要加密功能的程序都可以调用这个库。这个库建立在 libcrypto 之上,专门负责实现 SSL 和 TLS 协议。它处理了建立安全连接时的握手、密钥交换、身份认证等复杂过程。这是我们直接与 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 证书。场景三:数据加密与解密 (替代 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是好用的工具。