什么是OpenSSL

前言

本文主要聊聊啥是 OpenSSL

目标是看完之后可以用自己的语言去介绍它

正文

一、初印象

Node.js 官方文档的 crypto 模块处有提到它,内容是:

The node:crypto module provides cryptographic functionality that includes a set of wrappers for OpenSSL's hash, HMAC, cipher, decipher, sign, and verify functions.

翻译成中文就是:

node:crypto 模块提供了加密功能,其中包含对 OpenSSL 的哈希(hash)、HMAC、加密(cipher)、解密(decipher)、签名(sign)和验证(verify)函数的一系列封装。

那么啥是 【OpenSSL】?

OpenSSL 是一个开源的、用 C 语言编写的软件库集合命令行工具 ,它实现了通用的密码学功能安全通信协议

听了跟没听一样是正常的,可以继续看下去

其核心组成部分直接对应其名称:

  1. Open: 指其开源特性。
  2. SSL : 指其最初的核心------对 SSL(Secure Sockets Layer) 和其后继者 TLS(Transport Layer Security) 协议的实现。这是保障互联网 HTTPS 连接安全的基础。
  3. 工具库 : 它提供了丰富的密码学原语【原语它的英文是 Primitive,更准确的翻译是"基本构建模块"或"基础组件"。】和函数,包括:
    • 对称加密(如 AES,用于加密/解密数据)
    • 非对称加密(如 RSA,用于密钥交换和数字签名)
    • 密码散列函数【其实就是哈希、或者叫哈希函数】(如 SHA-256,用于生成数据指纹)
    • 数字证书(X.509 证书的处理)
    • 随机数生成

补充:"提供密码学原语" 这句话的通俗意思就是:它提供了实现加密、解密、签名等这些基础功能所需要的"工具"或"零件"。

总结来说,OpenSSL 是互联网的安全基石软件,为大量应用程序(包括 Node.js、Web 服务器、操作系统等)提供底层的加密和安全传输能力。

二、OpenSSL 在当今世界的作用与地位

平时上网、刷手机时,所有带小锁标志的网站(比如网上银行、登录微信、收发邮件),背后基本都是它在干活。

它主要干的活主要是下面两件事:

  1. 发"锁"和"钥匙":帮【你】和【网站】建立一个加密的私人通道。这样你输入的密码、聊天记录、银行卡号在传输过程中就被加了密,就算被黑客截获,也只是一堆乱码。

  2. 验"身份证":检查你访问的网站是不是"正经网站",而不是黑客伪造的钓鱼网站。它负责核对网站的数字证书(就像网站的身份证),确认身份无误后才建立连接。

它的地位呢?可以说是拉满了 ------ 说他是互联网基石都不为过。绝大多数软件和系统(比如苹果、安卓、Windows、各种服务器)都在用它。

不妨想想,如果 OpenSSL 出了个 BUG 会怎么样?

历史上最著名的例子就是 2014 年的"心脏出血"(Heartbleed)漏洞,感兴趣的可以去康康!

三、OpenSSL 和 HTTPS 的关系是什么?

【OpenSSL】 提供了实现 【HTTPS】 所必需的核心功能库,具体包括 TLS/SSL 协议实现、对称加密(如 AES)、非对称加密(如 RSA/ECC)、证书解析(X.509)及散列算法(如 SHA)。

Web 服务器(如 Nginx、Apache)通过调用 OpenSSL 库来建立加密链路、协商会话密钥并验证服务器证书,从而为客户端的 HTTPS 请求提供端到端的加密通信和安全认证服务。

✨ 小贴士:

看到这你可能有点懵,心想:给我干哪里来了,怎么越看越头晕呢

没事,头晕是正常的,继续看下去即可,后面会有总结

四、什么是 TLS/SSL?

TLS(Transport Layer Security)及其前身 SSL(Secure Sockets Layer)是加密协议,用于在计算机网络中通过加密、身份验证和完整性保护为通信提供安全保障。

其核心功能包括协商加密算法、交换会话密钥、验证对方身份(通常通过 X.509 证书)以及对传输数据进行加密和防篡改保护,是 HTTPS、FTPS 等安全应用层协议的基础。


上面听不懂,没关系,下面举个例子:

TLS/SSL 是一个安全协议,它的作用就像一套严格的操作手册,规定了两个关键步骤,确保数据在网络上传输时的安全:

第一步:握手(Handshake)

  1. 身份认证 :你的浏览器(客户端)会向网站服务器请求其数字证书。浏览器会验证这张证书是否由可信的机构颁发,且是否属于你正在访问的网站。这一步确认了"你不是在和一个假网站通信"。
  2. 协商密钥 :验证通过后,双方会通过数学算法协商生成一个只有他俩知道的会话密钥。这个密钥用于后续通信的加密和解密。【注意:这个会话密钥是用于对称加密的,而不是非对称加密】

第二步:通信(Communication)

  1. 加密传输 :此后,所有在浏览器和服务器之间往返的数据,都会使用刚才生成的会话密钥进行加密和解密。任何第三方即使截获了这些数据,也无法破解其内容。
  2. 防篡改 :同时,协议还会对传输的数据生成一个消息验证码(MAC),就像给数据包贴上了一个防伪 seal【中文是:密封、封条】。如果数据在传输中被修改,这个 seal 就会失效,接收方会立即丢弃损坏的数据包。

总结,TLS/SSL 直接提供了三个核心保障:

  • 保密性:数据被加密,窃听者看到的是乱码。
  • 完整性:数据无法被篡改,篡改必被发现。
  • 认证性:你通信的对象就是它声称的那个真实服务器。

你访问的任何以 https:// 开头的网站,其安全基础都是这个协议。

五、【总结!!】Node.js 的 crypto 模块、OpenSSL、HTTPS、TLS/SSL 协议他们之间的关系是什么?

  1. TLS/SSL 是协议: 它是一套规则,定义了如何建立安全的网络连接(包括加密、身份验证等)。HTTPS 的本质就是 HTTP over TLS/SSL。啥意思呢?其实 HTTPS 就是在普通的 HTTP 通信外面套上了一层 TLS/SSL 加密保护壳,这样理解就 ok 了。

  2. OpenSSL 是实现 : 它是一个用 C 语言编写的、遵循上述协议规则的软件库和工具集。它提供了协议要求的所有密码学功能(如加密、解密、证书处理等)的具体代码实现。总的来说,OpenSSL 就是将复杂的密码学数学公式和协议规则,用 C 代码写成可以直接调用的函数。

  3. Node.js crypto 模块是包装器 : Node.js 为了让开发者能方便地使用加密功能,其 crypto 模块封装(包装)了 OpenSSL 库的一部分功能,让你可以用 JavaScript 来调用这些底层能力,而无需直接写 C 代码。这里简单举一个 🌰:Node.js 的 crypto.createHash('sha256') 函数底层直接调用了 OpenSSL 的 SHA-256 算法实现。

  4. HTTPS 是应用 : HTTPS 是构建在 TLS/SSL 协议之上的具体应用。一个 Web 服务器(如 Nginx)使用 OpenSSL 这个库 来实现 TLS/SSL 这个协议 ,从而提供了 HTTPS 这种安全服务。比如 Nginx 借助 OpenSSL 库的能力,来完成 TLS 握手和加密通信,从而让普通的 HTTP 服务变成了 HTTPS 服务。

关系链: OpenSSL(实现) → 提供了实现 TLS/SSL 协议 所需的功能 → 从而使得 HTTPS 得以成立 → Node.js 通过 crypto 模块 让你能访问 OpenSSL 的部分功能。

下面用图来作为结尾的总结吧,更直观一些:

text 复制代码
+------------------+    "基于"    +------------------+
|  TLS/SSL Protocol| <-----------|      HTTPS       |
| (规则与标准)      |             | (HTTP over TLS)  |
+------------------+             +------------------+
       ^                                ^
       | "实现"                         | "依赖"
       |                                |
+-------------+    "被封装"    +-------------+
|   OpenSSL   | ------------> | Node.js     |
| (密码学库实现)|               | crypto 模块  |
+-------------+               +-------------+

时间线

  1. SSL (Secure Sockets Layer) - 由 Netscape 公司开发

SSL 1.0: (未发布) 由于存在严重安全漏洞,从未正式公开过。

SSL 2.0: 1995 年 - 第一个公开发布的版本。但设计缺陷很多,很快就被证明不安全。

SSL 3.0: 1996 年 - 对 SSL 2.0 的彻底重新设计,变得非常成功和流行。为未来的 HTTPS 奠定了基础。(已于 2015 年被正式废弃,被认为不安全)

  1. OpenSSL - 基于 SSL 协议诞生

1998 年 - 就在 SSL 3.0 发布后不久,OpenSSL 项目正式启动。其最初的目标就是为开源社区提供一个免费的、强大的 SSL 协议实现工具库。它的名字也直接来源于此。

  1. TLS (Transport Layer Security) - SSL 的标准化继承者

TLS 1.0: 1999 年 - 由于 Netscape 的影响力下降,互联网工程任务组(IETF)将 SSL 标准化,并改名为 TLS。TLS 1.0 可以看作是 SSL 3.1(内部版本号确实是 3.1),它修复了 SSL 3.0 的一些漏洞。

TLS 1.1: 2006 年 - 主要增加了一些保护措施来应对新发现的攻击方式(如 CBC 攻击)。

TLS 1.2: 2008 年 - 这是一个重大更新。它支持了更强大、更现代的加密算法(如 SHA-256 哈希函数、AEAD 加密模式如 GCM)。在很长一段时间里,这是安全标准的主流和黄金选择。

TLS 1.3: 2018 年 - 另一个巨大飞跃。简化了握手过程(更快),移除了一系列陈旧和不安全的加密算法(更安全),并且设计上更加注重隐私和安全。这是当前推荐的最新和最安全的版本。

  1. HTTPS 的普及

虽然 HTTPS 从一开始就存在,但它的大规模普及主要发生在 2010 年代中后期。

推动力包括:Let's Encrypt(2015 年成立)提供免费证书,谷歌在搜索引擎排名中优先推荐 HTTPS 网站,以及整个行业对安全和隐私的日益重视。

  1. Node.js Crypto 模块

2009 年 - Node.js 诞生。其 crypto 模块从一开始就是核心模块之一,因为它直接封装了 OpenSSL 的功能,为服务器端的 JavaScript 提供了至关重要的加密能力。

感谢这些先驱者的贡献!!

最后

回到主题吧,什么是 OpenSSL?

OpenSSL 是一个【开源的】、功能强大的软件库和【工具集】,它提供了全面的【密码学基础功】能和【安全通信协议实现】。

其核心包括对 SSL/TLS 协议的实现,以及各种加密算法(如 AES、RSA)、散列函数(如 SHA-256)【其实就是哈希函数!!!(Hash Function)】和数字证书(X.509)的处理能力。

它被广泛应用于操作系统、Web 服务器、网络设备及应用程序(如 Node.js)中,为网络通信提供加密、解密、身份验证和数据完整性保护,是保障 HTTPS 等安全服务得以运行的底层技术基础。

📚 补充知识 OpenSSL 这么厉害,它有没有啥竞争者呢? OpenSSL 的主要竞争者包括 【LibreSSL】(OpenBSD 为提升安全性而分叉的项目)、BoringSSL(Google 为自身需求定制的分支)以及 GnuTLS。不过,OpenSSL 凭借其悠久历史和广泛集成度,依然是应用最普遍的标准。

相关链接

相关推荐
想用offer打牌3 小时前
MCP (Model Context Protocol) 技术理解 - 第二篇
后端·aigc·mcp
KYGALYX5 小时前
服务异步通信
开发语言·后端·微服务·ruby
Hello.Reader5 小时前
Flink ZooKeeper HA 实战原理、必配项、Kerberos、安全与稳定性调优
安全·zookeeper·flink
掘了5 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
爬山算法5 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
智驱力人工智能5 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
Moment6 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
数据与后端架构提升之路6 小时前
论系统安全架构设计及其应用(基于AI大模型项目)
人工智能·安全·系统安全
Cobyte6 小时前
AI全栈实战:使用 Python+LangChain+Vue3 构建一个 LLM 聊天应用
前端·后端·aigc
程序员侠客行7 小时前
Mybatis连接池实现及池化模式
java·后端·架构·mybatis