当我这样做时openssl version
,我得到以下信息
OpenSSL 1.1.0j 20 Nov 2018 (Library: OpenSSL 1.1.0k 28 May 2019)
j
和库k
版本之间的这种差异在这里意味着什么?
我尝试openssl
通过do 进行更新,apt-get update && apt-get install openssl
然后当我执行 a 时openssl version
,我得到以下信息:
OpenSSL 1.1.0k 28 May 2019
顺便说一句,我是使用 Linux 的新手,所以对这些版本控制细节有点困惑。
OpenSSL 主要是一个库:程序可以使用的子程序的集合。它实际上是两个库组合在一起:
/usr/lib/libcrypto.so.1.1
一个包含与密码原语和证书管理/usr/lib/libssl.so.1.1
相关的子例程,另一个包含与 TLS 协议相关的子例程。文件名中的1.1
部分是库版本的一部分,包含这些文件的目录可能会有所不同(例如,在 64 位 PC 上的 Ubuntu 上,它是/usr/lib/x86_64-linux-gnu
)。这些库是libssl1.1
Debian/Ubuntu 和派生发行版的软件包的一部分(同样,1.1
是版本号的相关部分)。OpenSSL 还附带了一个命令行工具,该工具为和库
/usr/bin/openssl
中的功能提供命令行界面。它可以用来对密码原语进行基准测试、操作密钥和证书、运行一些测试等。它甚至可以用来做加密数据之类的事情,但该接口根本不适合实际使用:它也是低级和大多数使用它的方法是不安全的。命令行工具作为软件包的一部分提供。libcrypto
libssl
openssl
库包与包含命令行程序的包分开的原因与库包包含部分版本号并且库文件也包含该版本号的原因相同。可以安装多个版本的库,如果您有为库的不同版本的ABI构建的程序,则需要这样做。另一方面,您只能安装一个
openssl
命令。1.1.0j 和 1.1.0k 是 OpenSSL 的两个不同版本,它们足够接近以具有兼容的 ABI。通常,当程序的版本结构为中间带点的数字时,向左增加数字表示重大更改,而向右增加数字表示非常小的更改,例如错误修复。OpenSSL 倾向于通过增加最右边的数字甚至字母来进行重大更改,这有点不寻常。
通常情况下,您将拥有相同版本的命令行工具和库,可能还有一些用于使用较旧 ABI 构建的程序的旧库版本。例如,Ubuntu 18.04 发布了 OpenSSL 1.1.1,但它还为
libssl1.0.0
使用 1.0.0 的 ABI 构建的程序提供了包含 1.0.2 版本的库,而 1.0.2 仍然与之兼容。在最新的系统上,openssl
程序始终来自与其使用的库相同的版本,因为它们都来自相同的源包。但是在不是最新的系统上,您可能已经将库升级到 1.1.0k,但仍然有一个稍旧的命令行可执行文件 1.1.0j 版本。