编程

PHP 8.4: OpenSSL: OpenSSL 版本最低要求提升到 1.1.1

567 2024-05-18 06:08:00

PHP OpenSSL 扩展为 PHP 提供了加密、身份验证、密钥交换、密码哈希和通用哈希功能。OpenSSL 扩展使用 OpenSSL 库来提供此功能。
在 PHP 8.4 及更高版本上,构建 OpenSSL 扩展的最低要求从 1.0.1 增加到 1.1.1。该扩展也继续与 OpenSSL 兼容。

请注意,OpenSSL 1.1.1(2018 年 9 月发布)也已经到了生命的尽头。建议使用最新版本,或者依赖于将安全补丁备份到旧版本(如 Ubuntu LTS或 RHEL/Locky/EL)的软件源。OpenSSL 1.1中的主要新功能是支持 TLS 1.3。通过此更改,PHP OpenSSL 扩展可以安全地假设客户端将提供 TLS 1.3 支持。

对这个版本冲突的考虑是,一些 Linux 操作系统在 PHP 8.4 发布时到了它们生命的尽头,并且它们的下一个版本在其默认软件存储库中至少提供了 OpenSSL 1.1.1 及更高版本。

Distro nameOpenSSL VersionEOL Date
Debian buster1.1.1n2024 June
Ubuntu 20.041.1.1f2025 April
RHEL/CentOS 71.0.22024 June
RHEL/Rocky/EL 81.1.22024 June
Fedora 383.0.9rolling release

大多数操作系统已经提供了 OpenSSL 1.1.1 或更高版本。如上表所示,只有 RHEL/CentOS 7 受到影响。即使在 RHEL/CentOS 7 上,也可以通过使用较新的 openssl-devel 包版本编译扩展来编译 PHP。

编译更改

在 PHP 8.3 和更早的版本上,OpenSSL 扩展有一个名为 --with-kerberos  的编译标志来支持 TLS 中的 Kerberos 密码套件。

OpenSSL 1.1.0 中删除了对 Kerberos 密码套件的支持,PHP OpenSSL 扩展不再支持使用 Kerberos 支持构建扩展。

PHP 8.4 删除此标志,并将其传递给 ./configure  脚本现在在末尾显示一个警告,表示它不是受支持的标志。

向后兼容性影响

此更改将 PHP OpenSSL 扩展支持的最低 OpenSSL 库版本提高到 1.1.1。
除了 RHEL/CentOS 7 系列之外,操作系统可能会提供 OpenSSL 1.1.1 或更高版本,因此此更改不会产生任何影响。在 PHP 8.4 发布时,RHEL/CentOS 7 已是“生命终结”。

请注意,Fedora 36 及更高版本openssl-devel 包提供了 OpenSSL 3.x 系列。openssl11 包提供了 OpenSSL 1.1.1,以与不支持 OpenSSL 3.x API 的旧应用兼容。openssl11 包已在 Fedora 40 上删除,在默认软件存储库中不再可用。PHP 完全支持使用 OpenSSL 3.x 构建 OpenSSL 扩展,而且其一开始不再必需 openssl11 包。