概要
EoLまで1年もないCentOS 7は新OSに変えるのが正道だけど、2023/09/11にEoLを迎えたOpenSSL 1.1.1の代わりにOpenSSL 3.0.0が使えるか調べてみた。
Bing AIに聞いたら、普通にビルドすれば使えるらしい、ホントかな…
→ホントだったよ!
※ OpenSSL 3.0.xのrpmを作るならこちら
用意したもの
最小セットアップしたCentOS 7.9
[nissy@cent7-openssl30x ~]$ sudo yum update
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.tsukuba.wide.ad.jp
* extras: ftp.tsukuba.wide.ad.jp
* updates: ftp.tsukuba.wide.ad.jp
No packages marked for update
[nissy@cent7-openssl30x ~]$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[nissy@cent7-openssl30x ~]$ openssl version
OpenSSL 1.0.2k-fips 26 Jan 2017
※ Dockerコンテナのcentos:7でも可
その場合、以降の手順でsudoは不要
手順
OpenSSL 1.1.1のときの手順を参考にする
パッケージ追加
[nissy@cent7-openssl30x ~]$ sudo yum install gcc perl perl-IPC-Cmd perl-Test-Simple
※ make test
しない!ということなら perl-Test-Simple は入れなくていい
Dockerコンテナの場合はmakeも必要
[root@f16c64308500 ~]# yum install make gcc perl perl-IPC-Cmd perl-Test-Simple
ビルド
- ダウンロード
公式サイトからOpenSSL 3.0.xのtgzをダウンロードする
今回使ったのは3.0.11[nissy@cent7-openssl30x ~]$ curl -OL https://www.openssl.org/source/openssl-3.0.11.tar.gz
- 展開
[nissy@cent7-openssl30x ~]$ tar xzf openssl-3.0.11.tar.gz
- ディレクトリ移動してビルド
[nissy@cent7-openssl30x ~]$ cd openssl-3.0.11 [nissy@cent7-openssl30x openssl-3.0.11]$ ./config
※
Can't locate IPC/Cmd.pm
と言われるならperl-IPC-Cmdが入っていない[nissy@cent7-openssl30x openssl-3.0.11]$ make -j$(nproc)
- ビルド成功したか確認
[nissy@cent7-openssl30x openssl-3.0.11]$ make test 略 99-test_fuzz_server.t .............. ok 99-test_fuzz_x509.t ................ ok All tests successful. Files=250, Tests=3349, 370 wallclock secs ( 8.76 usr 0.71 sys + 280.70 cusr 60.60 csys = 350. 77 CPU) Result: PASS make[1]: Leaving directory `/home/nissy/openssl-3.0.11'
結構時間がかかるけど
Result: PASS
が表示されたら正常
※Can't locate Test/More.pm
と言われるならperl-Test-Simpleが入ってない - インストール
[nissy@cent7-openssl30x openssl-3.0.11]$ sudo make install
これも結構時間がかかる
ちなみにアンインストールはsudo make uninstall
- インストールしたパスを共有ライブラリとして追加
OpenSSL 1.1.1のときと同じようにlibssl.so.3
が見つからないので実行できない[nissy@cent7-openssl30x openssl-3.0.11]$ /usr/local/bin/openssl version /usr/local/bin/openssl: error while loading shared libraries: libssl.so.3: cannot open shared object file: No such file or directory [nissy@cent7-openssl30x openssl-3.0.11]$ ldd /usr/local/bin/openssl linux-vdso.so.1 => (0x00007ffdae9e9000) libssl.so.3 => not found libcrypto.so.3 => not found libdl.so.2 => /lib64/libdl.so.2 (0x00007fc31dc65000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fc31da49000) libc.so.6 => /lib64/libc.so.6 (0x00007fc31d67b000) /lib64/ld-linux-x86-64.so.2 (0x00007fc31de69000) [nissy@cent7-openssl30x openssl-3.0.11]$ sudo ldconfig -p | grep libssl.so.3 [nissy@cent7-openssl30x openssl-3.0.11]$
追加
# amd64の場合 [nissy@cent7-openssl30x-amd64 openssl-3.0.11]$ sudo sh -c 'echo /usr/local/lib64 > /etc/ld.so.conf.d/local.conf' # arm64の場合 [nissy@cent7-openssl30x-arm64 openssl-3.0.11]$ sudo sh -c 'echo /usr/local/lib > /etc/ld.so.conf.d/local.conf' # 以降はディレクトリ名にlib64かlibかの違いはあるけど、コマンドはamd64|arm64共通 [nissy@cent7-openssl30x openssl-3.0.11]$ sudo ldconfig [nissy@cent7-openssl30x openssl-3.0.11]$ ldd /usr/local/bin/openssl linux-vdso.so.1 => (0x00007ffeda7fe000) libssl.so.3 => /usr/local/lib64/libssl.so.3 (0x00007f86bbfd4000) libcrypto.so.3 => /usr/local/lib64/libcrypto.so.3 (0x00007f86bb961000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f86bb75d000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f86bb541000) libc.so.6 => /lib64/libc.so.6 (0x00007f86bb173000) /lib64/ld-linux-x86-64.so.2 (0x00007f86bc279000) [nissy@cent7-openssl30x openssl-3.0.11]$ sudo ldconfig -p | grep libssl.so.3 libssl.so.3 (libc6,x86-64) => /usr/local/lib64/libssl.so.3
- 確認
バージョン確認[nissy@cent7-openssl30x openssl-3.0.11]$ /usr/bin/openssl version OpenSSL 1.0.2k-fips 26 Jan 2017 [nissy@cent7-openssl30x openssl-3.0.11]$ /usr/local/bin/openssl version OpenSSL 3.0.11 19 Sep 2023 (Library: OpenSSL 3.0.11 19 Sep 2023)
TLSv1.3はOpenSSL 1.1.1からサポートされたので1.0.2kでは表示されないけど、
[nissy@cent7-openssl30x openssl-3.0.11]$ /usr/bin/openssl version OpenSSL 1.0.2k-fips 26 Jan 2017 [nissy@cent7-openssl30x openssl-3.0.11]$ /usr/bin/openssl ciphers -v 'ALL:COMPLEMENTOFALL' | grep TLSv1.3 [nissy@cent7-openssl30x openssl-3.0.11]$
3.0.11なら表示される
[nissy@cent7-openssl30x openssl-3.0.11]$ /usr/local/bin/openssl version OpenSSL 3.0.11 19 Sep 2023 (Library: OpenSSL 3.0.11 19 Sep 2023) [nissy@cent7-openssl30x openssl-3.0.11]$ /usr/local/bin/openssl ciphers -v 'ALL:COMPLEMENTOFALL' | grep TLSv1.3 TLS_AES_256_GCM_SHA384 TLSv1.3 Kx=any Au=any Enc=AESGCM(256) Mac=AEAD TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any Au=any Enc=CHACHA20/POLY1305(256) Mac=AEAD TLS_AES_128_GCM_SHA256 TLSv1.3 Kx=any Au=any Enc=AESGCM(128) Mac=AEAD
s_clientの接続確認も、1.0.2ではTLSv1.2で繋がるけど、
[nissy@cent7-openssl30x openssl-3.0.11]$ /usr/bin/openssl s_client -connect google.co.jp:443 < /dev/null 2> /dev/null | grep TLSv New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256 Protocol : TLSv1.2
3.0.11ならTLSv1.3で繋がる
[nissy@cent7-openssl30x openssl-3.0.11]$ /usr/local/bin/openssl s_client -connect google.co.jp:443 < /dev/null 2> /dev/null | grep TLSv New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384