由於我必須升級到 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。另外,我認為沒有維護 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,所以我不確定。