PHP 8.4: OpenSSL: OpenSSL 版本最低要求提升到 1.1.1
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 name | OpenSSL Version | EOL Date |
---|---|---|
Debian buster | 1.1.1n | 2024 June |
Ubuntu 20.04 | 1.1.1f | 2025 April |
RHEL/CentOS 7 | 1.0.2 | 2024 June |
RHEL/Rocky/EL 8 | 1.1.2 | 2024 June |
Fedora 38 | 3.0.9 | rolling 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
包。