间歇性SSL握手错误

时间:2012-08-14 20:13:32

标签: java security ssl active-directory weblogic

我们遇到SSL问题,我99%这不是您通常的证书信托商店旋转木马。

我们有一个Weblogic服务器尝试通过LDAPS与Active Directory建立SSL连接,底层SSL实现是JSSE。

有些时候,它有效。通常在重启Weblogic后几个小时。

之后我们开始收到SSL握手错误,启用SSL调试后我们会看到:

  

[ACTIVE] ExecuteThread:队列的'10':'weblogic.kernel.Default   (自调整)',处理异常:java.net.SocketException:   连接重置[ACTIVE] ExecuteThread:队列的'10':   'weblogic.kernel.Default(自我调整)',发送TLSv1警告:致命,   description = unexpected_message [ACTIVE] ExecuteThread:'10'表示   queue:'weblogic.kernel.Default(self-tuning)',WRITE:TLSv1 Alert,   length = 32 [ACTIVE] ExecuteThread:队列的'10':   'weblogic.kernel.Default(self-tuning)',异常发送提醒:   java.net.SocketException:管道损坏

到目前为止,我已尝试以下方法来理解/复制它:

  • 通过OpenSSL连接加载的证书 - 每次都可以正常工作
  • 通过安全的ldapsearch连接加载的证书 - 每次都可以正常工作
  • 通过自定义测试Java客户端连接 - 每次都可以正常工作
  • 使用Wireshark和私钥解密SSL握手。

我注意到Wireshark的“坏”握手,就是在客户端发送Change Cipher Spec之后,完成的消息AD没有以实物形式回复。更重要的是,Wireshark无法解密SSL握手,但失败了:

  

ssl_decrypt_pre_master_secret错误的pre_master_secret长度(109,   预期48)dissect_ssl3_handshake无法解密pre master secret

注意当SSL握手完美运行时,Wireshark SSL解密工作正常。

直到AD服务器没有响应的那一点,我看不出好的和坏的SSL握手有任何显着差异。

此时我感到难过......我真的很难理解为什么这会在某些时候失败并且其余的都会工作,此时我真的只是希望能提出一些建议。继续。

哦,是的,差点忘了。 Active Directory事件日志中存在错误:

  

事件ID:36888引发了以下致命警报:20。状态   内部错误是960。

经过一些研究后,我设法发现对应于SSL“BAD_RECORD_MAC”错误。

我现在唯一的理论是,由于某种原因,错误的公钥被用来加密握手......我不明白为什么服务器(和Wireshark)无法解密完成消息。

谢谢!

更新

我比较了坏的和好的情况,两种情况下的密码规范是相同的:TLS_RSA_WITH_AES_128_CBC_SHA。我还比较了来自客户端和服务器端的数据包,除非正常的以太网和IP协议差异看起来都相同。

2 个答案:

答案 0 :(得分:4)

经过大量的研究,实验和灵魂搜索。我们最终将此问题跟踪到我们用于连接外部系统的第三方库。在初始化时,它会在JSSE默认提供程序之前将其自身添加为安全提供程序。我不确切地知道为什么然后继续打破所有后续的SSL连接......但确实如此。

感谢您的帮助。

答案 1 :(得分:0)

据我所知,你有间歇性的问题。也就是说,您可以通过SSL连接到AD,但有时您会注意到此错误。所以我认为证书问题Error LDAPS不是你的问题。

根据您的描述,我只能想到以下内容:
首先,你没有提供太多实际细节,但你的评论是:

  

注意Wireshark SSL解密在SSL握手时非常有效   工作得很好。

给我一​​个提示,密码套件在坏情况下是不同的。请注意,即使您拥有私钥,wireshark也无法通过DHE生成的密钥解密连接 因此,如果密码套件在坏的和好的情况下确实不同(例如RSA与DHE),你应该查看你的调查。
此外,您的描述方式似乎在重新协商期间出现问题。也许重新协商已禁用,您可以启用它吗?它被认为是不安全的,通常可以在服务器中配置