状況:RHEL 7仮想マシンがあり、ここにActiveMQ(v5.16.0)がインストールされています(/opt/...)。
数日間、私のクライアントの一部は、TLS 1.0プロトコルであるオープンSSLポート(61617)を使用して接続できなくなりました。
エラーメッセージは次のとおりです。
Could not accept connection from tcp://10.10.170.1:45762: Client requested protocol TLSv1 is not enabled or supported in server context (Client requested protocol TLSv1 is not enabled or supported in server context)
次のコマンドを使用してサーバー自体でポートをテストするとき:
openssl s_client -connect localhost:61617 -tls1
openssl s_client -connect localhost:61617 -tls1_1
openssl s_client -connect localhost:61617 -tls1_2
...最初の2つのコマンドはSSL証明書を表示しませんが、3番目のコマンドは正しく機能します。
私の質問は次のとおりです
ActiveMQの設定で何も変更していないので、RHELのカーネルレベルで提供されるセキュリティパッチがいくつかあるかどうか疑問に思います。サーバーにこれがあるかどこで確認できますか?
ActiveMQ 側では、SSL に関して何も変更せず、AMQ トランスポート構成は Transport.tls を定義していません。
<transportConnector name="openwire+ssl" uri="ssl://0.0.0.0:61617?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
同じActiveMQ構成が本番サーバーで実行され続けているため、OSレベルで何かが行われているようです。
この質問をどこに投稿するのかわかりません:unix.SE、serverFault、または他のサイトに依存していると思われる場合は、自由に移行してください。私はこの質問をRHELに集中していますが、他の人も他のオペレーティングシステムについて学ぶのに役立ちます。
答え1
ActiveMQはクライアントが接続するサービスであるため、ActiveMQはSSL / TLS接続に対して有効にできるプロトコルを明示的に指定します。 Transport.tls ファイルを変更し、次のコンテンツを追加します。
<transportConnector name="openwire+ssl" uri="ssl://0.0.0.0:61617?transport.enabledProtocols=TLSv1,TLSv1.1,TLSv1.2&maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
これはまた、すべての弱いプロトコルを有効にします。 TLS 1.0およびTLS 1.1は安全とは見なされないため、注意して使用しないでください。
答え2
最近のopenjdkアップデート(私たちの場合は1.8.282から1.8.292へ)はデフォルトでTLSv1.0とTLSv1.1を無効にしているようです。
この変更は次に記録されます。次のチケット。
チケットから抜粋した内容は次のとおりです。
TLS 1.0および1.1を無効にする
解決策
java.security 構成ファイルの jdk.tls.disabledAlgorithms セキュリティ属性に「TLSv1」と「TLSv1.1」を追加します。
また、見ることができますRedHat リリースノート
章で3.1.4。 TLS 1.0および1.1バージョンを無効にする
TLSプロトコルのTLS 1.0および1.1バージョンはもはや安全であると見なされず、より安全で現代的なTLS 1.2および1.3バージョンに置き換えられました。 TLS バージョン 1.0 および 1.1 はデフォルトで無効になっています。問題が発生した場合は、java.security設定ファイルのjdk.tls.disabledAlgorithmsセキュリティ属性からTLSv1またはTLSv1.1を削除してバージョンを再度有効にすることができます(責任は自分の負担です)。
これは、廃止されたプロトコルを使用するクライアントでActiveMQが突然動作を停止した理由を示しています。ベストプラクティスは、最も弱いプロトコルを再度有効にするのではなく、これらのクライアントを移行することです。
「興味深い」点は、ActiveMQを再起動するまでサービス(ActiveMQ)がまだ最新のJDKを使用しているため、パッチの日付がクライアントで問題が発生し始めた日付とは異なる可能性があることです。
答え3
次のコマンドを使用して、サーバーで特定のTLSが無効になっているかどうかをテストできますcurl
。
curl -vI --tls-max 1.0 https://example.org/
curl -vI --tls-max 1.1 https://example.org/
TLS をディセーブルにすると、次のエラーが発生します。
カール: (35) LibreSSL/3.3.6: エラー: 1404B42E: SSL ルーチン: ST_CONNECT: tlsv1 警告プロトコル・バージョン