CentOS7のApacheとOpenSSLのアップデート

当サーバ(CentOS7)のTLS1.3対応を実施した(CentOS7のTLS1.3対応とApacheへの適用)際には、OpenSSLのバージョンは、1.1.1uにしましたが、Apacheは、過去にアップデートした(CentOS7のApache最新版アップデート)バージョン2.4.46のままだったので、それぞれを最新安定版にアップデートしました。

◆最新安定バージョン

OpenSSLは、2023.8.1にバージョン1.1.1vもリリースされているが、サポート期間が2023.9.11までとなっているので、最新のバージョン3.1へとアップデートします。

Apache:2.4.46 ⇒ 2.4.57
OpenSSL:1.1.1u ⇒ 3.1.2

手順については、上手くいかなかったりした部分もあったが、その点については、反映しているので以降の順に進めればアップデートされます。
※実施については、自己責任でお願いします。

◆OpenSSLのバージョンアップ

先にOpenSSLのバージョンアップを実施します。

・必要パッケージのインストール

# yum install perl-IPC-Cmd

1行目:「perl-IPC-Cmd」パッケージのインストール

・OpenSSLの最新バージョンのダウンロードとインストール

最新バージョンを確認し、ダウンロードとインストールを実施します。

# wget https://www.openssl.org/source/openssl-3.1.2.tar.gz
# tar zxvf openssl-3.1.2.tar.gz
# cd openssl-3.1.2/
# ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl
# make
# make install

1行目:最新安定バージョン3.1.2(2023.8.6現在)のダウンロード
2行目:ダウンロードファイルの展開
3行目:展開ディレクトリへ移動
4行目:configureの実行
5行目:コンパイル
6行目:インストール

・インストールディレクトリの確認

# ll /usr/local/openssl/
合計 68
drwxr-xr-x 2 root root  4096  8月  6 11:03 bin
drwxr-xr-x 2 root root  4096  6月 18 11:52 certs
-rw-r--r-- 1 root root   412  6月 18 11:52 ct_log_list.cnf
-rw-r--r-- 1 root root   412  8月  6 11:03 ct_log_list.cnf.dist
drwxr-xr-x 3 root root  4096  6月 18 11:52 include
drwxr-xr-x 4 root root  4096  6月 18 11:52 lib
drwxr-xr-x 5 root root  4096  8月  6 11:03 lib64
drwxr-xr-x 2 root root  4096  8月  6 11:03 misc
-rw-r--r-- 1 root root 10909  6月 18 11:52 openssl.cnf
-rw-r--r-- 1 root root 12324  8月  6 11:03 openssl.cnf.dist
drwxr-xr-x 2 root root  4096  6月 18 11:52 private
drwxr-xr-x 4 root root  4096  6月 18 11:53 share

1行目:インストールしたディレクトリの確認
8行目:バージョン1.1.1uのライブラリディレクトリ
9行目:バージョン3.1.2のライブラリディレクトリ

# ll /usr/local/openssl/lib64/
合計 16524
drwxr-xr-x 2 root root    4096  8月  6 11:03 engines-3
-rw-r--r-- 1 root root 9559038  8月  6 11:03 libcrypto.a
lrwxrwxrwx 1 root root      14  8月  6 11:03 libcrypto.so -> libcrypto.so.3
-rwxr-xr-x 1 root root 5303616  8月  6 11:03 libcrypto.so.3
-rw-r--r-- 1 root root 1229284  8月  6 11:03 libssl.a
lrwxrwxrwx 1 root root      11  8月  6 11:03 libssl.so -> libssl.so.3
-rwxr-xr-x 1 root root  772368  8月  6 11:03 libssl.so.3
drwxr-xr-x 2 root root    4096  8月  6 11:03 ossl-modules
drwxr-xr-x 2 root root    4096  8月  6 11:03 pkgconfig

1行目:ライブラリディレクトリの確認

・旧バージョンのライブラリディレクトリのリネーム

削除してもいいのかもしれないが、とりあえずリネームしバックアップします。
※活かしたままにしておくと、Apacheのコンパイルの際に読み込みに行っているようで失敗します。

# mv /usr/local/openssl/lib /usr/local/openssl/lib_1.1_org

1行目:バージョン1.1.1uのライブラリディレクトリをリネーム

・共有ライブラリの設定

# echo "/usr/local/openssl/lib64" > /etc/ld.so.conf.d/openssl.conf
# ldconfig

1行目:共有ライブラリへのパスを定義
2行目:共有ライブラリへの検索キャッシュの更新

・ライブラリの確認

# ldconfig -p | grep ssl
        libssl3.so (libc6,x86-64) => /lib64/libssl3.so
        libssl.so.10 (libc6,x86-64) => /lib64/libssl.so.10
        libssl.so.3 (libc6,x86-64) => /usr/local/openssl/lib64/libssl.so.3
        libssl.so (libc6,x86-64) => /usr/local/openssl/lib64/libssl.so
        libssl.so (libc6,x86-64) => /lib64/libssl.so
        libcrypto.so.3 (libc6,x86-64) => /usr/local/openssl/lib64/libcrypto.so.3
        libcrypto.so (libc6,x86-64) => /usr/local/openssl/lib64/libcrypto.so

1行目:「ldconfig」コマンドの「-p」オプションで現在のキャッシュに保存されているライブラリのリストを確認、「grep」で「ssl」を検索表示
4,5,7,8行目:インストールしたバージョン「3」のライブラリ

・コマンドのパスとバージョンの確認

# which openssl
/usr/local/openssl/bin/openssl
# openssl version
OpenSSL 3.1.2 1 Aug 2023 (Library: OpenSSL 3.1.2 1 Aug 2023)

1行目:コマンドのパスの確認
2行目:コマンドのフルパス表示
3行目:インストールしたOpenSSLのバージョン確認
4行目:バージョン「3.1.2」を表示

コマンドのパス設定及び環境変数設定は前回1.1.1uアップデート時に実施しているのでする必要はありません。
されていない場合は、こちらを参照してください。

◆Apacheのアップデート

前回「CentOS7のTLS1.3対応とApacheへの適用」で実施した要領と同様に「mod_ssl」モジュールのみ入れ替えます。

・「mod_ssl」モジュールのリネーム

# mv /etc/httpd/modules/mod_ssl.so /etc/httpd/modules/mod_ssl.so_1.1_org

1行目:バージョン1.1.1uの「mod_ssl」モジュールをリネーム
※Apacheをアップデートした際に上書きされてしまいます。

・Apacheのパッケージのダウンロードとビルド

# wget https://dlcdn.apache.org/httpd/httpd-2.4.57.tar.gz
# tar zxvf httpd-2.4.57.tar.gz
# cd httpd-2.4.57/
# ./configure --with-ssl=/usr/local/openssl
# make

1行目:Apacheのソースファイルをダウンロード
2行目:ダウンロードファイルの展開
3行目:展開ディレクトリへ移動
4行目:configureの実行。「–with-ssl」オプションでOpenSSLのインストールディレクトリを指定
5行目:コンパイル

「mod_ssl」モジュールだけ必要なので、「make install」は実行しません。

・「mod_ssl」モジュールの確認

# readelf -d modules/ssl/.libs/mod_ssl.so

Dynamic section at offset 0x4dd48 contains 29 entries:
 タグ        タイプ                       名前/値
 0x0000000000000001 (NEEDED)             共有ライブラリ: [libssl.so.3]
 0x0000000000000001 (NEEDED)             共有ライブラリ: [libcrypto.so.3]
 0x0000000000000001 (NEEDED)             共有ライブラリ: [libpthread.so.0]
 0x0000000000000001 (NEEDED)             共有ライブラリ: [libdl.so.2]
 0x0000000000000001 (NEEDED)             共有ライブラリ: [libc.so.6]
 0x000000000000000e (SONAME)             ライブラリの soname: [mod_ssl.so]

1行目:「readelf」コマンドで「mod_ssl」のヘッダ情報を確認
5,6行目:共有ライブラリのバージョンがインストールしたOpenSSLのバージョン(3)になっているのを確認

・Apacheのyumアップデート

過去記事「CentOS7のApache最新版アップデート」で実施したIUSリポジトリを使用し、アップデートします。

# yum update --enablerepo=ius httpd
~ 中略 ~

更新:
  httpd24u.x86_64 0:2.4.57-1.el7.ius

依存性を更新しました:
  httpd24u-devel.x86_64 0:2.4.57-1.el7.ius                    httpd24u-filesystem.noarch 0:2.4.57-1.el7.ius
  httpd24u-mod_ssl.x86_64 1:2.4.57-1.el7.ius                  httpd24u-tools.x86_64 0:2.4.57-1.el7.ius

完了しました!

1行目:IUSリポジトリを有効にしてyumでアップデート

・バージョンの確認

# httpd -v
Server version: Apache/2.4.57 (IUS)
Server built:   Apr  7 2023 14:49:47

1行目:Apacheのバージョンの確認
2行目:バージョン「2.4.57」を表示

・「mod_ssl」モジュールの設置

 # mv /etc/httpd/modules/mod_ssl.so /etc/httpd/modules/mod_ssl.so_org
 mv: `/etc/httpd/modules/mod_ssl.so_org' を上書きしますか? y
 # cp modules/ssl/.libs/mod_ssl.so /etc/httpd/modules/

1行目:「mod_ssl」モジュールのバックアップ
2行目:アップデートした際のバックアップファイルがある場合は上書き
3行目:新しい「mod_ssl」モジュールをコピーして設置

# systemctl restart httpd
# systemctl status httpd

1行目:サービスの再起動
2行目:サービスの状態確認

◆確認

前回更新時に同様の確認をしているので、詳細はこちらを参照してください。

・TLS checker

TLS checker」でTLS/SSL設定を確認できます。

・SSL Labs

SSL Labs」では、Webサーバの構成情報を詳細に分析できます。

・ブラウザ(Chrome)での確認

「デベロッパーツール」で「TLSプロトコルバージョン」と「暗号化スイート」を確認できます。

この手順で実施するとダウンタイムは恐らく最小限で済むものと考えらます。
次回は、Apacheのチューニングをしていきたいと思います。

いいね! & シェア お願いします。

コメントは受け付けていません。