SSLに問題があり、私は99%ですが、これは通常の証明書トラストストアのメリーゴーランドではありません。
LDAPSを介してActiveDirectoryへのSSL接続を確立しようとしているWeblogicサーバーがあります。基礎となるSSL実装はJSSEです。
時々、それは動作します。通常、Weblogicを再起動してから数時間。
その後、SSLハンドシェイクエラーが発生し始め、SSLデバッグがオンになっていると次のようになります。
[ACTIVE] ExecuteThread: '10' for queue:'weblogic.kernel.Default(self-tuning)'、処理例外:java.net.SocketException:Connection reset [ACTIVE] ExecuteThread: '10' for queue:'weblogic.kernel .Default(self-tuning)'、SEND TLSv1 ALERT:fatal、description = expected_message [ACTIVE] ExecuteThread:' 10'for queue:' weblogic.kernel.Default(self-tuning)'、WRITE:TLSv1 Alert、length = 32 [ACTIVE] ExecuteThread: '10' for queue:'weblogic.kernel.Default(self-tuning)'、Exception send alert:java.net.SocketException:Broken pipe
これまでのところ、私はそれを理解/複製するために次のことを試みました:
- 証明書がロードされた状態でOpenSSLを介して接続する-毎回正常に動作します
- 証明書がロードされた状態で安全なldapsearchを介して接続する-毎回正常に動作する
- カスタムテストJavaクライアントを介した接続-毎回正常に動作します
- Wiresharkと秘密鍵を使用してSSLハンドシェイクを復号化します。
「悪い」ハンドシェイクについてWiresharkで気付いたのは、クライアントがChange Cipher Specを送信した後、FinishedメッセージADが現物で応答しないことです。さらに、WiresharkはSSLハンドシェイクを復号化できず、次のように失敗します。
ssl_decrypt_pre_master_secret間違ったpre_master_secretの長さ(109、予想される48)dissect_ssl3_handshakeはpremastersecretを復号化できません
注:SSLハンドシェイクが完全に機能する場合、WiresharkSSL復号化は完全に機能します。
ADサーバーが応答しなくなるまで、SSLハンドシェイクの良し悪しに大きな違いは見られません。
この時点で私は困惑しています...なぜこれがしばらくの間失敗し、残りは機能するのかを理解するのに本当に苦労しています。この時点で私は本当に何が起こっているのかについていくつかの提案を望んでいます。
そうそう、ほとんど忘れてしまった。ActiveDirectoryイベントログにエラーがあります。
イベントID:36888次の致命的なアラートが発生しました:20。内部エラーの状態は960です。
これは、少し調べてみたところ、SSLの「BAD_RECORD_MAC」エラーに対応していることがわかりました。
この時点で私が持っている唯一の理論は、何らかの理由でハンドシェイクの暗号化に間違った公開鍵が使用されているということです...サーバー(およびWireshark)が完成したメッセージの復号化に失敗する理由は他の方法ではわかりません。
ありがとう!
更新:
悪いケースと良いケースを比較しました。どちらの場合も暗号仕様は同じです:TLS_RSA_WITH_AES_128_CBC_SHA。また、クライアント側とサーバー側の両方からのパケットを比較しましたが、通常のイーサネットとIPプロトコルの違いを除けば、すべて同じように見えます。