Apacheを2.4.58にしてOpenSSLを3.0.13に更新した

この記事は、Apache2.4.58をRavenリポジトリからダウンロードして、OpenSSLはビルドインストールを行ったことの記録です。

免責

以下の実行は自己責任でお願いいたします。不利益が生じたとしても、責任は負いかねますφ(..)

前提

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

これにて一段落!
SiteScan君「ApacheもOpenSSLも最新だね!ところでさ、君のOpenSSH古くね?」

OpenSSH更新編に続く・・・