擁有 php 5.3.2 + Openssl 1.0.1 + Ubuntu 16.04

擁有 php 5.3.2 + Openssl 1.0.1 + Ubuntu 16.04

由於我必須升級到 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。現在我有幾個問題

  1. 我可以單獨安裝 PHP 5.3.2 並運行它嗎?如果是這樣,會使用 TLS 1.2 嗎?
  2. 或者我需要刪除 PHP 7 來安裝 PHP 5.3.2,OpenSSL 也會降級嗎?
  3. 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。另外,我認為沒有維護 5.3 支援的儲存庫/發行版。

我認為唯一好的選擇正在將您的程式碼遷移到受支援的 PHP 版本,或至少 5.4/5.5。您可以找到官方 PHP 遷移指南這裡

反正,如果你需要一個骯髒的解決方法,您可能有兩個主要選擇:

  • 自己編譯一下
  • 使用第三方聚苯胺,虛擬機或者容器

如果你想自己編譯(儘管可能會帶來很多麻煩),連結到較新的 OpenSSL 並解決可能出現的潛在問題,如 @user133831 提到的,您可以按照以下步驟操作這個答案

如果您想避免編譯它並且您希望使用聚苯胺,您可以嘗試使用安裝謝爾蓋·D·奧恩。檢查ppa說明以安裝對應的PHP模組。

我還看到了基於較舊 Ubuntu 版本(例如 12.04 和 12.10)的 PHP 5.3 的特定第三方 Docker 容器(也適用於較舊的 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,所以我不確定。

相關內容