什么是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 凭借其悠久历史和广泛集成度,依然是应用最普遍的标准。

相关链接

相关推荐
bobz9652 小时前
mcp 直接操作浏览器
后端
前端小张同学4 小时前
服务器部署 gitlab 占用空间太大怎么办,优化思路。
后端
databook4 小时前
Manim实现闪光轨迹特效
后端·python·动效
武子康5 小时前
大数据-98 Spark 从 DStream 到 Structured Streaming:Spark 实时计算的演进
大数据·后端·spark
该用户已不存在5 小时前
6个值得收藏的.NET ORM 框架
前端·后端·.net
文心快码BaiduComate5 小时前
文心快码入选2025服贸会“数智影响力”先锋案例
前端·后端·程序员
neoooo5 小时前
🌐 Cloudflare Tunnel vs ZeroTier:两个世界的内网穿透哲学
后端
集成显卡5 小时前
windows 下使用 bat 批处理运行 Chrome 无头模式刷一波访问量
windows·程序员
涡能增压发动积5 小时前
当你不了解“异步”时请慎用“异步”——记一次生产环境故障排查之旅
后端