この記事は、Apache2.4.58をRavenリポジトリからダウンロードして、OpenSSLはビルドインストールを行ったことの記録です。
免責
以下の実行は自己責任でお願いいたします。不利益が生じたとしても、責任は負いかねますφ(..)
前提
- Rocky Linux 9.3
- Apache 2.4.57
- OpenSSL 3.0.7
Apache 2.4.58のインストール
Ravenリポジトリのインストール
# dnf install https://pkgs.dyn.su/el8/base/x86_64/raven-release-1.0-2.el8.noarch.rpm
httpdのバックアップ
// 任意の場所に丸ごとバックアップ
# cp /etc/httpd /xxx/xxxx//etc/httpd_bk
RavenリポジトリからApache最新版(本記事作成時の最新2.4.58)のインストール
// 最新のhttpdがあるか確認
# dnf --disablerepo=AppStream --enablerepo=raven list available httpd
// httpdを停止
# systemctl stop httpd
// インストール(要注意:allowerasingで上書き可能にしている)
# dnf --disablerepo=AppStream --enablerepo=raven upgrade httpd --allowerasing
// バージョン確認
# httpd -V
->Server version: Apache/2.4.58 (Red Hat Enterprise Linux)
# systemctl start httpd
OpenSSL 3.0.13のインストール
※もともとのOpenSSL 3.0.7は残しています
ソースのダウンロード
// ダウンロードするディレクトリに移動
# cd /usr/local/src
// wgetでダウンロードする
# wget https://www.openssl.org/source/openssl-3.0.13.tar.gz
// ファイルを展開
# tar -zxf openssl-3.0.13.tar.gz
config
// 展開してできたディレクトリに移動
# cd openssl-3.0.13
// config実行(enable-md2がないと後々sudoやdnf等などが起動できなくなる)
# ./config --prefix=/usr/local/openssl-3.0.13 --openssldir=/usr/local/ssl enable-md2
// もし上記コマンド実行時にperl関連のパッケージでエラーが出るなら以下を実行後してから再度config
# yum install perl perl-FindBin perl-open perl-YAML perl-File-HomeDir perl-Unicode-LineBreak
// 念のためMD2が有効か確認(enable-md2がないと後々sudoやdnf等などが・・・)
# ./configdata.pm --dump
// パスを通しておく
# ./Configure '-Wl,-rpath,$(LIBRPATH)'
# make
// もしもnetinet/sctp.h: No such file or directoryとなったら以下を実行してから再度make
# dnf install lksctp-tools lksctp-tools-devel
# make install
バージョン確認
# openssl version
->OpenSSL 3.0.13 30 Jan 2024 (Library: OpenSSL 3.0.13 30 Jan 2024)
そのApache、OpenSSL 3.0.13使ってますか?
ApacheもOpenSSLも更新して、バージョン確認もして安心したのも束の間、毎日実施しているSiteScanから「君のところのApache、OpenSSL 3.0.7使ってるよね?大丈夫?」と言われてしまいました。
OpenSSL更新したはずだけどな〜と思い、念の為確認(さっきやってる)。
# openssl version
->OpenSSL 3.0.13 30 Jan 2024 (Library: OpenSSL 3.0.13 30 Jan 2024)
最新じゃん!外から確認してみるか・・・
wget -S -O - http://xxx.xxx.xxx.xx 2>&1 | grep Server
->Server: Apache/2.4.58 (Red Hat Enterprise Linux) OpenSSL/3.0.7
更新前のOpenSSL/3.0.7使ってるじゃん・・・
弱々エンジニアな自分は、ApacheとOpenSSLを更新するだけで満足してしまってました。更新後のOpenSSLを使うようにしないとだめですね。
最新のOpenSSLをApacheに使ってもらおう
調べたところ、以下の方法があることがわかりました。
- Apacheをソースからビルドし直してApacheを再インストール
- Apacheをソースからビルドして、mod_sslだけを入れ替える
今回は、mod_sslだけを入れ替えることに。
mod_sslが欲しいので、Apacheをソースからビルドする
# yum install apr-devel apr-util-devel pcre-devel
# cd /usr/local/src
# tar -zxf httpd-2.4.58.tar.gz
# cd httpd-2.4.58/
// ここでOpenSSL 3.0.13を指定する
# ./configure --enable-ssl --with-ssl=/usr/local/src/openssl-3.0.13
// mod_sslだけが欲しいので、make installはしない
# make
mod_sslを入れ替える
// とにもかくにもまずはバックアップ
# cp /etc/httpd/modules/mod_ssl.so /etc/httpd/modules/mod_ssl_20240220bk.so
# cp /usr/local/src/httpd-2.4.58/modules/ssl/.libs/mod_ssl.so /etc/httpd/modules/
// OpenSSL 3.0.13を使用しているか確認
# strings /usr/lib64/httpd/modules/mod_ssl.so | grep OpenSSL
// 共有ライブラリを認識させる
# echo '/usr/local/lib64' | tee -a /etc/ld.so.conf
# ldconfig
// 確認
# wget -S -O - http://xxx.xxx.xxx.xxx 2>&1 | grep Server
->Server: Apache/2.4.58 (Red Hat Enterprise Linux) OpenSSL/3.0.13