由于我必须升级到 TLS1.2,所以我必须升级到 OpenSSL 1.0.1 或更高版本。为此,我必须从 Ubuntu 10.04 升级到 Ubuntu 16.04
Ubuntu 10.04 有
PHP 5.3.2
MySQL 5.1.66
Apache 2.2.14
OpenSSL 0.9.8
Ubuntu 16.04 有
PHP 7.0.18
MySQL 5.7.18
Apache 2.4.18
OpenSSL 1.0.2
正如预期的那样,我现在拥有 OpenSSL 1.0.2,但是该网站现在无法运行,因为 PHP 版本已升级到 7.0.18。现在我有几个问题
- 我可以单独安装 PHP 5.3.2 并运行它吗?如果可以,它会使用 TLS 1.2 吗?
- 或者如果我需要删除 PHP 7 来安装 PHP 5.3.2,OpenSSL 也会降级吗?
- MySQL 已被某些版本的 PHP 弃用(我不知道哪个版本的 PHP/MySQL)。由于我的 MySQL 版本也已升级,我还可以从 PHP 5.3.2 访问 MySQL 吗?
我知道 PHP 5.3 已经停产。但我现在应该有这个版本来运行我的代码,但使用的是 TLS 1.2。
简而言之,我需要
PHP 5.3.2 可访问 MySQL + TLS1.2(>openssl 1.0.1) + Ubuntu 16.04。
如何实现这一点?
答案1
很大程度上取决于您是否只想使用官方支持的软件包。
如果您知道如何操作,没有什么可以阻止您删除 PHP 7 软件包并自行编译 PHP 5.3.2 并链接到 OpenSSL 1.0.2。这可能很容易,也可能很难,具体取决于依赖项中的 API 更改。不过,使用 5.3.29 可能值得,据我所知,它应该与您的 5.3.2 代码兼容,但还有一些修复。
http://www.php.net/releases/#5.3.29
不过,在正式发布之前,我会检查自发布以来出现的安全问题。它不再受 IIUC 支持,因此您需要自行修补它。
由于缺乏安全补丁,我还建议尽快更新代码库。PHP 发布迁移指南(例如http://php.net/migration54),您可以关注每一个,直到再次获得支持。
我个人并不知道有任何软件包(官方的或其他的)可以让你避免自己编译。
答案2
PHP 5.3 已达到 EOL。另外,我认为没有维护的 repo/distro 提供有效的 5.3 支持。
我认为唯一的好选择正在将代码迁移到受支持的 PHP 版本,或至少 5.4/5.5。您可以找到官方的 PHP 迁移指南这里。
反正,如果你需要一个肮脏的解决方法,你可能有两个主要选择:
- 自己编译
- 使用第三方苯甲酸,虚拟机或者容器
如果你想自己编译(尽管很麻烦),链接到较新的 OpenSSL 并解决可能出现的潜在问题,如 @user133831 提到的,您可以按照以下步骤操作这个答案。
如果你想避免编译它,并且你正在考虑使用苯甲酸,您可以尝试使用安装SergeyD 的. 查看ppa说明,安装相应的PHP模块。
我还看到了基于旧版本 Ubuntu 的 PHP 5.3 专用第三方 Docker 容器,例如 12.04 和 12.10(旧版 OpenSSL 也适用)。不过,你可以尝试(然后扔掉)docker 容器,看看它是否能解决你的问题。也许你想看看这些链接:从头开始使用 PHP 5.3 Dockerfile,PHP 5.3 Docker 映像
无论你选择哪种方式,我建议在 VM 或 lxc/lxd/docker 容器中完成所有“脏”事(至少一开始),避免对主系统造成太大干扰。
无论如何,如果你选择继续使用 PHP 5.3,请记住,你最终可能会得到其他“副作用”,例如 MYSQL API 在较新版本中存在的问题、较新版本中修复的错误和不兼容性,当然还有,潜在的安全漏洞。
希望能帮助到你。
答案3
在 16.04 上,我可以使用以下命令强制降级 libssl-dev:
apt-get install libssl-dev=1.0.2*
安装许多 lib*-dev 包后,我能够使用以下命令通过 phpbrew 编译 php 5.3.29:
phpbrew install 5.3.29 +everything -fpm +apxs2 -cli -cgi -phpdbg -dtrace -opcache -embed -gcov
我还安装了 ondrej/php ppa,这可能是一个因素,尽管它实际上只应该给你 php 5.6.x,所以我不确定。