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 暗号鍵や証明書の更新(推奨)
セキュリティを保ちながら問題を解決するには、古い暗号鍵や証明書を更新することが最善です。
更新方法:
- SHA-256以上を使用:
証明書署名にSHA-256以上を使用してください。 - RSA鍵を2048ビット以上にする:
OpenSSLで新しいRSA鍵を生成する例:
openssl genrsa -out private_key.pem 2048
- 証明書を再発行:
更新した鍵を使って、認証局(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
に変更することも可能ですが、長期的には推奨されません。
セキュリティと互換性のバランスを考慮し、適切な対策を講じましょう!