httpd(apache) openssl 1.1.1、TLSv1.3対応 (CentOS7)

CentOS7にて、opensslの最新版を入れて、httpd(apache)をTLSv1.3に対応するメモ書きです。

参考記事

CentOS7.x で、httpsの「TLSv1.3」を。openssl 1.1.1、php7.4.x、nginx 1.20
TLS v1.3 にするために、openssl 1.1.1をソースインストール。 phpとnginxを新しいopenssslに対応させたときの覚え書きです。 関連記事 ↑ httpd(apache) の設定は、こちらに、 o...

nginx、phpの関係は、上記の記事を・・・

openssl 1.1.1kインストール

openssl 1.1.1

nginxのほうで書いた記事と同じ方法です。

yum で最初から入っていたバージョンは、

# /usr/bin/openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017

↑ これを、最新の、openssl 1.1.1kにします。
ソースインストールしか手段はありません・・・

# cd /usr/local/src/
# wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz
# tar xzvf openssl-1.1.1k.tar.gz 
# cd openssl-1.1.1k
# ./config --prefix=/usr/local/openssl shared zlib

↑「prefix」でインストールディレクトリを指定します。
指定をしなくてもphp、nginxとも、構築が可能かと思います。
指定した方が、面倒ではないので・・・

# make
# make install

↑コンパイルして、インストールをします。

vi /etc/ld.so.conf.d/openssl-1.1.conf
/usr/local/openssl/lib/

↑上記、1行を入れて保存をします。

# ldconfig
# ldconfig -p |grep openssl
        libssl.so.1.1 (libc6,x86-64) => /usr/local/openssl/lib/libssl.so.1.1
        libssl.so (libc6,x86-64) => /usr/local/openssl/lib/libssl.so
        libcrypto.so.1.1 (libc6,x86-64) => /usr/local/openssl/lib/libcrypto.so.1.1
        libcrypto.so (libc6,x86-64) => /usr/local/openssl/lib/libcrypto.so

↑ライブラリの設定ができました。

# cd
# vi .bashrc

export PATH="/usr/local/openssl/bin/:$PATH";

↑「export」の行を加えます。
「openssl」コマンドで、パスが通るようにします。

# which openssl
/usr/local/openssl/bin/openssl
# openssl version
OpenSSL 1.1.1k  XX Xxx 2021

↑ 新しいバージョンが認識されました。

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

↑ ライブラリは、openssl 1.0.x系と、openssl 1.1.x系が同居しております。

httpd 2.4.41

openssl 1.1.1kの認識、試行錯誤

openssl の新しいバージョンを認識させるのに少し、苦労をしました。

export PKG_CONFIG_PATH=/usr/local/openssl/lib/pkgconfig/

↑上記の設定が重要です。

export LD_LIBRARY_PATH=/usr/local/openssl/lib/
export LD_LIBRARY_PATH_64=/usr/local/openssl/lib/

↑上記の環境変数を設定しても、今回のhttp 2.4.41では、うまく、認識してくれませんでした。

--with-ssl=/usr/local/openssl/lib/
--with-ssl=/usr/local/src/openssl-1.1.1k

と、httpd 2.4.41 の、configure時に、「–with-ssl」を指定しても、認識してくれませんでした。

最終的に有効な設定

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

1)↑ ldconfig で、認識させる

export PKG_CONFIG_PATH=/usr/local/openssl/lib/pkgconfig/

2)↑ 環境変数、PKG_CONFIG_PATHで設定

この2つが、重要でした。

httpd 2.4.41 インストール

# export PKG_CONFIG_PATH=/usr/local/openssl/lib/pkgconfig/
# tar xzvf httpd-2.4.41.tar.gz
# cd httpd-2.4.41

# ./configure --enable-suexec --enable-ssl --with-suexec-caller=www --with-suexec-userdir=web --with-suexec-docroot=/home --with-suexec-logfile=/usr/local/apache2/logs/suexec_log --with-suexec-uidmin=100 --with-suexec-gidmin=100 --with-suexec-safepath=/bin:/usr/bin --enable-module=so --enable-module=rewrite --enable-modules=ssl
# make

# ldd ./modules/ssl/.libs/mod_ssl.so 
        linux-vdso.so.1 =>  (0x00007ffeef1b0000)
        libssl.so.1.1 => /usr/local/openssl/lib/libssl.so.1.1 (0x00007f3d369b1000)
        libcrypto.so.1.1 => /usr/local/openssl/lib/libcrypto.so.1.1 (0x00007f3d364c5000)
        librt.so.1 => /lib64/librt.so.1 (0x00007f3d362bd000)
        libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f3d36086000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f3d35e6a000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f3d35c66000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f3d35898000)
        libz.so.1 => /lib64/libz.so.1 (0x00007f3d35682000)
        libfreebl3.so => /lib64/libfreebl3.so (0x00007f3d3547f000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f3d36e7e000)

↑ 「make install」する前に(本番ディレクトリにインストールをする前に)、openssl 1.1.1系がリンクされいるかチェックしましょう。

「libssl.so.1.1 => /usr/local/openssl/lib/libssl.so.1.1」
となっているので、大丈夫のようです。

openssl 1.0 系では、
「libssl.so.10 => /lib64/libssl.so.10」
というふうに表示されると、openssl 1.0系となります。。

# make install

↑インストールをします。

httpd(apache) 再起動後

/usr/local/apache2/logs/error_log

Apache/2.4.41 (Unix) OpenSSL/1.1.1k

↑ と表示されていればOKです。

httpd 設定

SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1

もしくは、

SSLProtocol -all +TLSv1.2 +TLSv1.3

でもいいかと思います。

apacheを再起動して、

TLS Checker - Instant Results
Does your server or CDN support the latest TLS 1.3? Check your SSL/TLS setup now!

にてテストをすると

と、すべてOK(Excellent)となります。

タイトルとURLをコピーしました