RHEL9で古い暗号鍵やSHA-1を使うとTLS接続ができない問題とその解決策

Red Hat Enterprise Linux 9 (RHEL9) では、セキュリティの向上を目的とした暗号化ポリシーの強化が行われています。この強化により、古い暗号鍵非推奨のSHAハッシュアルゴリズム(特にSHA-1)を使用している場合、TLS接続が失敗することがあります。本記事では、この問題の背景や原因、解決策を詳細に解説します。



1. TLS接続失敗の原因:RHEL9の暗号化ポリシー強化

RHEL9では、暗号化関連のシステム設定が「暗号ポリシーフレームワーク」という仕組みで統一的に管理されています。このフレームワークは、システム全体で使用される暗号アルゴリズムやTLSプロトコルの設定を制御し、デフォルトでは最新かつ安全なアルゴリズムのみを許可します。

1.1 暗号ポリシーの種類

RHEL9で利用可能な暗号ポリシーは以下の4種類です:

  • DEFAULT: 推奨される安全な設定(デフォルト)。SHA-1やRSA 1024ビットなど古い暗号は無効。
  • LEGACY: 古い暗号化アルゴリズムも許可。互換性重視。
  • FUTURE: より強固なセキュリティ設定。SHA-1やTLS 1.2も非推奨。
  • FIPS: FIPS 140-2に準拠する高セキュリティモード。

デフォルトのDEFAULTポリシーでは、以下が制限されています:

  • RSA鍵長が2048ビット未満の鍵は無効。
  • SHA-1を使用した署名アルゴリズムは無効。
  • TLS 1.0およびTLS 1.1プロトコルは無効。

2. TLS接続失敗の具体例

2.1 古い証明書の問題

TLS証明書がSHA-1で署名されている場合、RHEL9のシステムではその証明書を信頼できないため、TLSハンドシェイクが失敗します。

例:SHA-1証明書の確認
以下のコマンドで証明書の署名アルゴリズムを確認できます。

openssl x509 -in cert.pem -text -noout | grep "Signature Algorithm"

出力例:

Signature Algorithm: sha1WithRSAEncryption

この場合、証明書はSHA-1を使用しており、RHEL9では無効となります。


2.2 RSA鍵長の問題

RSA鍵の長さが1024ビットの場合も、RHEL9のデフォルト設定では不十分と判断され、TLS通信が失敗します。

例:RSA鍵長の確認
以下のコマンドでRSA鍵の長さを確認できます。

openssl rsa -in private_key.pem -text -noout | grep "Private-Key"

出力例:

Private-Key: (1024 bit)

この場合、鍵長が1024ビットのため、RHEL9では推奨されません。


スポンサーリンク

3. 解決策

TLS接続失敗を解消するための解決策を以下に示します。推奨度の高い順に記載しています。

3.1 暗号鍵や証明書の更新(推奨)

セキュリティを保ちながら問題を解決するには、古い暗号鍵や証明書を更新することが最善です。

更新方法:

  1. SHA-256以上を使用:
    証明書署名にSHA-256以上を使用してください。
  2. RSA鍵を2048ビット以上にする:
    OpenSSLで新しいRSA鍵を生成する例:
   openssl genrsa -out private_key.pem 2048
  1. 証明書を再発行:
    更新した鍵を使って、認証局(CA)から新しい証明書を発行してください。

3.2 暗号ポリシーを「LEGACY」に変更(互換性重視)

古い暗号化アルゴリズムを一時的に許可する場合、暗号ポリシーをLEGACYに設定します。ただし、セキュリティリスクが伴うため注意が必要です。

設定手順

update-crypto-policies --set LEGACY

設定後にシステムや該当するサービスを再起動します。

現在のポリシーを確認

update-crypto-policies --show

3.3 アプリケーション固有の設定を変更

一部のアプリケーションでは、システムの暗号ポリシーに依存せず、独自に設定を調整できます。たとえば、OpenSSLやApache HTTP Serverの設定を変更することで問題を回避できます。

例:OpenSSLで古いアルゴリズムを許可

openssl.cnfファイルを編集し、古いアルゴリズムを許可します。

[system_default_sect]
MinProtocol = TLSv1.0
CipherString = DEFAULT:@SECLEVEL=1

4. 問題解決後の検証

TLS通信が正常に機能するか確認するため、以下のツールを使用してください。

4.1 OpenSSLでサーバとのTLS接続をテスト

openssl s_client -connect <サーバ>:443

このコマンドで、TLSハンドシェイクが成功するか確認します。

4.2 暗号化アルゴリズムの検証

接続時に使用される暗号化アルゴリズムを確認します。

openssl s_client -connect <サーバ>:443 | grep "Cipher"

スポンサーリンク

5. まとめ

RHEL9でTLS接続が失敗する問題は、暗号鍵や署名アルゴリズムの古さが原因であることが多いです。最善策は、暗号鍵や証明書を更新し、最新のセキュリティ要件を満たすようにすることです。一時的な対応として暗号ポリシーをLEGACYに変更することも可能ですが、長期的には推奨されません。

セキュリティと互換性のバランスを考慮し、適切な対策を講じましょう!


コメントを残す