AlmaLinux9.1をOpenSSL3.0.7にバージョンアップする

セキュリティ

0.前書き

私がインフラ園児ニアになって、1年が経ちました。

これまでいろいろな記事を揚げてきましたが、去年唯一できなかったTLS1.3を喋るサーバの構築を行おうと思います。とは言いつつもウェブサーバはすでにあるし、何を建てよう?

 

そう考えていると、ふと我が家には監視ツールがほとんどないことに気づきました。

 

Fortigateに直接つながった機器の生死監視しかしていません。

 

というわけでZabbixサーバを構築して、webアクセスをTLS1.3にしようと思います。

本記事はその前段階に当たるOpenSSLのバージョンアップです。

 

AlmaLinux9.1にはOpenSSL3.0.1がプレインストールされていますが、昨年の11月ごろに結構大きな脆弱性が見つかったバージョンなので、最新の3.0.7に上げようという算段です。

 

2023年2月11日追記

OpenSSL3.0.7で脆弱性が見つかり、OpenSSL3.0.8が公開されました。

 

先んじてバージョンアップしたところ問題なく動きました。

以下すべてのコマンドの「3.0.7」を「3.0.8」に置換すればOpenSSL3.0.8のバージョンアップが可能です。

 

 

2023年7月1日追記

現在、Almaのリポジトリから3.0.7までバージョンアップできるようなので、本手順不要です

↓こんな面倒なことせずdnfでバージョンアップしてください

 

 

1.環境説明

①Zabbixサーバ (導入予定)

 

構築システム:OpenSSL3.0.7(2023年2月現在最新)

ホスト名:zabbixserver

OS:AlmaLinux release 9.1 (Lime Lynx)

IPアドレス:172.16.1.6

 

※OSインストール済みで、NTP,DNS,ホスト名は設定完了しているものとします。またSELinuxは無効化している前提です。

 

②ドメイン環境

 

DNSドメイン名:home.miyamo83.com

 

2.構築手順

赤字の設定値は環境に合わせて変更してください。

 

まず現行パッケージのアップデートです。

# dnf -y update

 

OpenSSL3.0.7はソースからインストールするため、コンフィグレーションに必要なPerlをインストールします。

# dnf install -y perl

 

ソースコードインストール前にカレントディレクトリを移動します。

# cd /usr/local/src

 

ソースコードをパクってきます。

# wget https://www.openssl.org/source/openssl-3.0.7.tar.gz

 

tarファイルを展開し、移動します。展開前の圧縮フォルダの削除もやってやりましょう。

# tar xvzf openssl-3.0.7.tar.gz ;cd openssl-3.0.7 ;rm -f ../openssl-3.0.7.tar.gz

 

インストール先のフォルダを作成しておきます。

# mkdir -p /usr/local/ssl/openssl-3.0.7

 

Makefileを作っちゃいましょう。

 

以下間違ったコマンドです。

# ./config -fPIC --shared --prefix=/usr/local/ssl/openssl-3.0.7 

 

正解コマンドです。こっちを使ってください

# ./config -fPIC --shared --prefix=/usr/local/ssl/openssl-3.0.7 enable-md2

また後で出てきます…

いずれのコマンドもエラーなく通り、以下のように返ってきます。

 

Configuring OpenSSL version 3.0.7 for target linux-x86_64
Using os-specific seed configuration
Created configdata.pm
Running configdata.pm
Created Makefile.in
Created Makefile
Created include/openssl/configuration.h

**********************************************************************
*** ***
*** OpenSSL has been successfully configured ***
*** ***
*** If you encounter a problem while building, please open an ***
*** issue on GitHub <https://github.com/openssl/openssl/issues> ***
*** and include the output from the following command: ***
*** ***
*** perl configdata.pm –dump ***
*** ***
*** (If you are new to OpenSSL, you might want to consult the ***
*** ‘Troubleshooting’ section in the INSTALL.md file first) ***
*** ***
**********************************************************************

 

ではコンパイルです。-j4は4コアでマルチプロセスでの処理を可能にします。

# make -j4

 

インストールします。

# make install -j4

 

./config時に指定したインストール先フォルダに移動します。

# cd /usr/local/ssl/openssl-3.0.7

 

sslというフォルダがありますが、現行を引き継ぐために今あるものの名前を変えます。

# mv ssl ssl.bk

 

現行フォルダである「/etc/pki/tls」にシンボリックリンクを作成します。

# ln -s /etc/pki/tls /usr/local/ssl/openssl-3.0.7/ssl

 

フォルダ内はこんな感じ

drwxr-xr-x 2 root root 37 2月 5 23:03 bin
drwxr-xr-x 3 root root 21 2月 5 23:03 include
drwxr-xr-x 5 root root 173 2月 5 23:03 lib64
drwxr-xr-x 4 root root 28 2月 5 23:03 share
lrwxrwxrwx 1 root root 12 2月 5 23:04 ssl -> /etc/pki/tls
drwxr-xr-x 5 root root 140 2月 5 23:02 ssl.bk

 

「/usr/local/ssl/openssl-3.0.7/lib64」はデフォルトでは共有ライブラリとして認識されないので、以下のファイルにパスを書き込みます。一番上とかでいいです。

# vi /etc/ld.so.conf

/usr/local/ssl/openssl-3.0.7/lib64

(openssl-1.1.xはlib64ではなくlibだった気がします。)

 

設定反映させる前に今の状態を確認してみましょう。

# ldconfig -p | grep ssl

こんな感じで返ってきました。

libxmlsec1-openssl.so.1 (libc6,x86-64) => /lib64/libxmlsec1-openssl.so.1
libxmlsec1-openssl.so (libc6,x86-64) => /lib64/libxmlsec1-openssl.so
libssl3.so (libc6,x86-64) => /lib64/libssl3.so
libssl.so.3 (libc6,x86-64) => /lib64/libssl.so.3
libevent_openssl-2.1.so.7 (libc6,x86-64) => /lib64/libevent_openssl-2.1.so.7

 

では設定反映です。

# ldconfig

 

うまくいったか確認してみましょう。

# ldconfig -p | grep ssl

こんな感じで返ってきました。

libxmlsec1-openssl.so.1 (libc6,x86-64) => /lib64/libxmlsec1-openssl.so.1
libxmlsec1-openssl.so (libc6,x86-64) => /lib64/libxmlsec1-openssl.so
libssl3.so (libc6,x86-64) => /lib64/libssl3.so
libssl.so.3 (libc6,x86-64) => /usr/local/ssl/openssl-3.0.7/lib64/libssl.so.3
libssl.so.3 (libc6,x86-64) => /lib64/libssl.so.3
libssl.so (libc6,x86-64) => /usr/local/ssl/openssl-3.0.7/lib64/libssl.so
libevent_openssl-2.1.so.7 (libc6,x86-64) => /lib64/libevent_openssl-2.1.so.7
libcrypto.so.3 (libc6,x86-64) => /usr/local/ssl/openssl-3.0.7/lib64/libcrypto.so.3
libcrypto.so (libc6,x86-64) => /usr/local/ssl/openssl-3.0.7/lib64/libcrypto.so

 

この状態でOpenSSLのバージョンを確認すると、エラーになります。

# openssl version

openssl: /usr/local/ssl/lib64/libcrypto.so.3: version `OPENSSL_3.0.1′ not found (required by openssl)

 

新しいバージョンをインストールして内部の設定が変更されたにもかかわらず、OpenSSLのコマンドが古いバージョンを参照しているのだと思われます。

 

パスを通しましょう。下の方に書けばよいです。

# vi ~/.bashrc

PATH="/usr/local/ssl/openssl-3.0.7/bin:$PATH"

 

設定を反映させるコマンドです。

# source ~/.bashrc

 

リベンジします。

# openssl version

OpenSSL 3.0.7 1 Nov 2022 (Library: OpenSSL 3.0.7 1 Nov 2022)

 

このように返れば成功です。

作業は完了です、お疲れさまでした!!

 

と言いたいところなのですが、この後Sudoやdnfなどの主要コマンドが軒並み使えなくなりました。

 

以下エラー内容です。

 

sudo: /etc/sudo.conf, 14 行目 プラグイン “sudoers_policy” をロード中にエラーが発生しました
sudo: /usr/libexec/sudo/sudoers.so をロードできません: /lib64/libldap.so.2: undefined symbol: EVP_md2, version OPENSSL_3.0.0
sudo: 致命的エラー、プラグインをロードできません

 

どうやら、/usr/libexec/sudo/sudoers.soと依存関係になっている /lib64/libldap.so.2のmd2というシンボルが参照できないとぬかしています。

 

カタカタネットサーフィンしていると./configの際に「enable-md2」を付けると解消されるというのを見つけました。フリダシに戻ります。

 

正しいコマンド「./config -fPIC –shared –prefix=/usr/local/ssl/openssl-3.0.7 enable-md2」を打ち込んだ方は以上で終了となります。


 

ソースコードのフォルダに戻ります。

# cd -

 

OpenSSLのアンインストールとコンフィグレーションの削除

# make uninstall -j4
# make distclean -j4

 

Makefile作成

# ./config -fPIC --shared --prefix=/usr/local/ssl/openssl-3.0.7 enable-md2

 

以下これまでと同じコマンドですのでコメント省略。

# make -j4 ;make install -j4

# cd /usr/local/ssl/openssl-3.0.7 ;mv ssl ssl.bk

# ln -s /etc/pki/tls /usr/local/ssl/openssl-3.0.7/ssl

# ldconfig

# ldconfig -p | grep ssl

# /usr/local/ssl/openssl-3.0.7/bin/openssl version

# source ~/.bashrc

 

確認です。

# openssl version

OpenSSL 3.0.7 1 Nov 2022 (Library: OpenSSL 3.0.7 1 Nov 2022)

 

問題のsudoも無事解消されていました。

 


 

 

3.後書き

うちの環境では、rootユーザのログインシェルを無効化しているのでSudoが使えなくなると本気で何もできなくなります。

 

ちなみに、その状態で再起動してしまうと一般ユーザーのシェルすら起動しなくなります。

 

てへ、いっけな~い。破滅破滅~★

 

4.参考サイト

【学習メモ】 openssl1.1.1c+OracleLinux8でエラー - Qiita
はじめにRHEL8系でOpenSSLの2019年9月時点の最新版1.1.1cを入れようとしたところ、エラーになりました。インストールした手順と解決方法のメモ書きです。#環境# cat /et…

 

コメント

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