RHEL9のOpenSSLでSHA-1署名を有効化する
こんにちは、TUです。
RHEL9にリプレース後、SHA-1署名が使えなくなった際の対応を記録しておきます。
実施コマンドと発生したエラー
通常、SSL証明書の署名はSHA-2(SHA-256)で署名されていますが、古い環境の再現の為、RHEL9上でSHA-1署名で自己証明書を発行しようとしたところ、CSR発行の際に以下のエラーが発生しました。
# openssl req -new -key mycert_key.pem -sha1 -subj “/C=JP/ST=Tokyo/L=xxxx/O=xxxx/CN=tu.netassist.ne.jp” -out mycert_csr.pem
40EC376F457F0000:error:03000098:digital envelope routines:do_sigver_init:invalid digest:crypto/evp/m_sigver.c:343:
SHA-1署名は相当古い規格となりますので、当然と言えば当然となる動きなのですが、脆弱性がある事は了承の上、今回はSHA-1署名を有効化したいと思います。
RHEL9ドキュメントから解消方法を確認
解消方法は非常に簡単で、RHEL9のドキュメントに記載がある通りになります。
OpenSSL の新しいオプションは、署名で SHA-1 をサポートします
RHEL 9 の OpenSSL 3.0.0 は、デフォルトで署名の作成と検証で SHA-1 をサポートしていません (SHA-1 鍵派生関数 (KDF) とハッシュベースのメッセージ認証コード (HMAC) はサポートされています)。ただし、引き続き署名に SHA-1 を使用する RHEL 8 システムとの後方互換性をサポートするために、新しい設定オプション
rh-allow-sha1-signatures
が RHEL 9 に導入されました。このオプションがopenssl.cnf
のalg_section
で有効になっている場合、SHA-1 署名の作成と検証が許可されます。
RHEL9からは、デフォルトではSHA-1署名はサポートしない為、オプションとして明示的に有効にする必要がありそうです
対応記録
実際にオプションを指定し、SHA-1署名を有効にしてみます。
バックアップを取得して設定していきます。
# cp -ip /etc/pki/tls/openssl.cnf /etc/pki/tls/openssl.cnf.org
# vi /etc/pki/tls/openssl.cnf
openssl_initセクションに「alg_section = algsec」を追記し・・・
[openssl_init]
providers = provider_sect
# Load default TLS policy configuration
ssl_conf = ssl_module
#↓以下を追記
alg_section = algsec
末尾にalgsecセクションを追記した上で、「rh-allow-sha1-signatures = yes」を指定します。
[algsec]
rh-allow-sha1-signatures = yes
これで終わりです!非常に簡単ですね。
# ls -l
total 4
-rw——- 1 root root 1704 Sep 27 12:19 mycert_key.pem
# openssl req -new -key mycert_key.pem -sha1 -subj “/C=JP/ST=Tokyo/L=xxxx/O=xxxx/CN=tu.netassist.ne.jp” -out mycert_csr.pem
# ls -l
total 4
-rw-r–r– 1 root root 985 Oct 7 21:26 mycert_csr.pem
-rw——- 1 root root 1704 Sep 27 12:19 mycert_key.pem
エラー無く秘密鍵からCSRが発行出来た事も確認できました。
最後に
という訳で、RHEL9のSHA-1署名を有効にしてみました。
Almalinux9,RockyLinux9でも同様にSHA-1署名は有効に出来る筈ですので、もしどうしても古い規格での署名・検証が必要な際は、”脆弱性がある事を了承した上で”、お試しいただければと思います。
最後までお読みいただき、ありがとうございました!