Apacheに最新版のOpenSSL3を組み込んでソースインストールする方法

2022年6月17日

前提

書くこと/書かないこと

最新のOpenSSLを組み込んだApacheをソースコードからインストールする方法を書きます。

環境

AlmaLinux release 8.6 (Sky Tiger) ※CentOS8代替OS
OpenSSL 3.0.3 3 May 2022 (Library: OpenSSL 3.0.3 3 May 2022)

さくっと

内容的にさくっとまとめるのが難しいので後回しにします。

こってりと

はじめに

Apacheをリポジトリからインストールすると通常は最新版でなく、OpenSSLも古いため脆弱性が残る状態だったりします。

OpenSSL3の最新版をソースコードからインストールする方法は前回書いたので、今回はこの続きとして、このOpenSSLを組み込んだApacheのインストールについて書きます。

事前準備

Apacheをソースインストールする場合はAPRとAPR-utilが必要になりますので、まずはこちらを先にインストールします。

開発ツールのインストール

APR-utilをインストールするのに必要とexpat-develとpcre-develを先にdnfからインストールします。

# dnf install expat-devel pcre-devel

APRとAPR-utilのインストール

Apacheのサイトから最新版を入手します。

https://apr.apache.org/download.cgi

現時点でAPRは1.7.0、APR-utilは1.6.1が最新です。
それぞれのtar.gzを右クリックしてリンクアドレスをコピーし、サーバにダウンロードします。

# cd /usr/local/src/
# wget https://dlcdn.apache.org//apr/apr-1.7.0.tar.gz
--2022-06-04 23:40:34--  https://dlcdn.apache.org//apr/apr-1.7.0.tar.gz
dlcdn.apache.org (dlcdn.apache.org) をDNSに問いあわせています... 151.101.2.132, 2a04:4e42::644
dlcdn.apache.org (dlcdn.apache.org)|151.101.2.132|:443 に接続しています... 接続 しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 1093896 (1.0M) [application/x-gzip]
`apr-1.7.0.tar.gz' に保存中

apr-1.7.0.tar.gz    100%[===================>]   1.04M  --.-KB/s 時間 0.02s

2022-06-04 23:40:34 (57.1 MB/s) - `apr-1.7.0.tar.gz' へ保存完了 [1093896/1093896]

# wget https://dlcdn.apache.org//apr/apr-util-1.6.1.tar.gz
--2022-06-04 23:41:02--  https://dlcdn.apache.org//apr/apr-util-1.6.1.tar.gz
dlcdn.apache.org (dlcdn.apache.org) をDNSに問いあわせています... 151.101.2.132, 2a04:4e42::644
dlcdn.apache.org (dlcdn.apache.org)|151.101.2.132|:443 に接続しています... 接続 しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 554301 (541K) [application/x-gzip]
`apr-util-1.6.1.tar.gz' に保存中

apr-util-1.6.1.tar. 100%[===================>] 541.31K  --.-KB/s 時間 0.01s

2022-06-04 23:41:03 (37.8 MB/s) - `apr-util-1.6.1.tar.gz' へ保存完了 [554301/554301]

解凍 ~ コンフィギュレーション ~ ビルド ~ インストール

一気に行きます。
まずはAPRから。

# cd /usr/local/src
# tar zxvf apr-1.7.0.tar.gz
# cd apr-1.7.0/
# ./configure
# make
# make install

次はAPR-utilです。今インストールしたばかりのAPRのパスを指定します。

# cd /usr/local/src
# tar zxvf apr-util-1.6.1.tar.gz
# cd apr-util-1.6.1
# ./configure --with-apr=/usr/local/apr
# make
# make install

ここまででApacheインストールの事前準備完了です。
次はようやくApache本体のインストールになります。

Apacheのインストール

ソースコードの入手

Apacheのサイトから最新版を入手します。

https://httpd.apache.org/download.cgi

現時点では2.4.53が最新です。
httpd-2.4.53.tar.gzを右クリックしてリンクアドレスをコピーし、サーバにダウンロードします。

# cd /usr/local/src/
# wget https://dlcdn.apache.org/httpd/httpd-2.4.53.tar.gz
--2022-06-02 19:44:52--  https://dlcdn.apache.org/httpd/httpd-2.4.53.tar.gz
dlcdn.apache.org (dlcdn.apache.org) をDNSに問いあわせています... 151.101.2.132, 2a04:4e42::644
dlcdn.apache.org (dlcdn.apache.org)|151.101.2.132|:443 に接続しています... 接続 しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 9726558 (9.3M) [application/x-gzip]
`httpd-2.4.53.tar.gz' に保存中

httpd-2.4.53.tar.gz 100%[===================>]   9.28M  --.-KB/s 時間 0.06s

2022-06-02 19:44:52 (156 MB/s) - `httpd-2.4.53.tar.gz' へ保存完了 [9726558/9726558]

解凍 ~ コンフィギュレーション

tar.gzを展開してconfigureします。

configureのオプションではインストール先のパス(prefix)、APRのパス(with-included-apr)、SSLモジュールの有効化(enable-ssl)、別インストールしたOpenSSL3のパス(with-ssl)を明示的に指定します。

# tar zxvf httpd-2.4.53.tar.gz
# cd httpd-2.4.53/
# ./configure --prefix=/usr/local/httpd --enable-ssl --with-ssl=/usr/local/openssl --with-included-apr=/usr/local/apr

ビルド ~ インストール

エラーがなければmakeとmake installだけでOKです。

# make
# make install

インストール結果の確認

インストールが終わったらバージョンを確認します。

# /usr/local/httpd/bin/httpd -v
Server version: Apache/2.4.53 (Unix)

OKですね。
mod_sslの方もOpenSSL3が使われているか確認します。

# ldd /usr/local/httpd/modules/mod_ssl.so
        linux-vdso.so.1 (0x00007fff6eddb000)
        libssl.so.3 => /usr/local/openssl/lib64/libssl.so.3 (0x00007f882f61a000)
        libcrypto.so.3 => /usr/local/openssl/lib64/libcrypto.so.3 (0x00007f882efb9000)
        librt.so.1 => /lib64/librt.so.1 (0x00007f882edb1000)
        libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f882eb88000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f882e968000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f882e764000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f882e39f000)
        libz.so.1 => /lib64/libz.so.1 (0x00007f882e187000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f882faff000)

libssl.so.3とlibcrypto.so.3の参照先がソースインストールした/usr/local/opensslになっているのでOKです。

apacheのモジュールも見てみましょう。
/usr/local/httpd/modulesの下にインストールされたモジュールと、初期状態で有効になっているものを確認すると下記のようになっていました。

モジュール存在(/etc/httpd/modules)有効(httpd -M)
mod_access_compatYY
mod_actionsY
mod_aliasYY
mod_allowmethodsY
mod_auth_basicYY
mod_auth_digestY
mod_auth_formY
mod_authn_anonY
mod_authn_coreYY
mod_authn_dbdY
mod_authn_dbmY
mod_authn_fileYY
mod_authn_socacheY
mod_authz_coreYY
mod_authz_dbdY
mod_authz_dbmY
mod_authz_groupfileYY
mod_authz_hostYY
mod_authz_ownerY
mod_authz_userYY
mod_autoindexYY
mod_bufferY
mod_cacheY
mod_cache_diskY
mod_cache_socacheY
mod_cgidY
mod_davY
mod_dav_fsY
mod_dbdY
mod_deflateY
mod_dirYY
mod_dumpioY
mod_envYY
mod_expiresY
mod_ext_filterY
mod_file_cacheY
mod_filterYY
mod_headersYY
mod_includeY
mod_infoY
mod_lbmethod_bybusynessY
mod_lbmethod_byrequestsY
mod_lbmethod_bytrafficY
mod_lbmethod_heartbeatY
mod_log_configYY
mod_log_debugY
mod_logioY
mod_macroY
mod_mimeYY
mod_negotiationY
mod_proxyY
mod_proxy_ajpY
mod_proxy_balancerY
mod_proxy_connectY
mod_proxy_expressY
mod_proxy_fcgiY
mod_proxy_fdpassY
mod_proxy_ftpY
mod_proxy_hcheckY
mod_proxy_httpY
mod_proxy_scgiY
mod_proxy_uwsgiY
mod_proxy_wstunnelY
mod_ratelimitY
mod_remoteipY
mod_reqtimeoutYY
mod_requestY
mod_rewriteY
mod_sedY
mod_sessionY
mod_session_cookieY
mod_session_dbdY
mod_setenvifYY
mod_slotmem_shmY
mod_socache_dbmY
mod_socache_memcacheY
mod_socache_redisY
mod_socache_shmcbY
mod_spelingY
mod_sslY
mod_statusYY
mod_substituteY
mod_unique_idY
mod_unixdYY
mod_userdirY
mod_versionYY
mod_vhost_aliasY
mod_watchdogY

不要なモジュールが有効になっているのは想定内ですが、mod_http2を筆頭に、一部の必要なモジュールが存在しないことがわかりました。

「最新のOpenSSLを組み込んだApacheをソースコードからインストールする」というこの記事の目的は最低限達成できましたが、このままでは実用に耐えないので、また別記事を書こうと思います。