我们遇到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:管道损坏
到目前为止,我已尝试以下方法来理解/复制它:
我注意到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协议差异看起来都相同。
答案 0 :(得分:4)
经过大量的研究,实验和灵魂搜索。我们最终将此问题跟踪到我们用于连接外部系统的第三方库。在初始化时,它会在JSSE默认提供程序之前将其自身添加为安全提供程序。我不确切地知道为什么然后继续打破所有后续的SSL连接......但确实如此。
感谢您的帮助。
答案 1 :(得分:0)
据我所知,你有间歇性的问题。也就是说,您可以通过SSL连接到AD,但有时您会注意到此错误。所以我认为证书问题Error LDAPS不是你的问题。
根据您的描述,我只能想到以下内容:
首先,你没有提供太多实际细节,但你的评论是:
注意Wireshark SSL解密在SSL握手时非常有效 工作得很好。
给我一个提示,密码套件在坏情况下是不同的。请注意,即使您拥有私钥,wireshark也无法通过DHE生成的密钥解密连接
因此,如果密码套件在坏的和好的情况下确实不同(例如RSA与DHE),你应该查看你的调查。
此外,您的描述方式似乎在重新协商期间出现问题。也许重新协商已禁用,您可以启用它吗?它被认为是不安全的,通常可以在服务器中配置