【发布时间】:2012-08-11 04:48:35
【问题描述】:
我们遇到了 SSL 问题,我 99% 这不是您通常的证书信任存储旋转木马。
我们有一个 Weblogic 服务器试图通过 LDAPS 与 Active Directory 建立 SSL 连接,底层 SSL 实现是 JSSE。
有时,它会起作用。通常在重启 Weblogic 后几个小时。
之后我们开始收到 SSL 握手错误,打开 SSL 调试后我们看到:
[ACTIVE] ExecuteThread: '10' for queue: 'weblogic.kernel.Default (self-tuning)',处理异常:java.net.SocketException: 连接重置 [ACTIVE] ExecuteThread:队列的“10”: 'weblogic.kernel.Default (self-tuning)',发送 TLSv1 警报:致命的, 描述 = 意外消息 [ACTIVE] ExecuteThread: '10' for queue: 'weblogic.kernel.Default (self-tuning)', WRITE: TLSv1 Alert, 长度 = 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 无法解密预主密钥
注意,当 SSL 握手完美运行时,Wireshark SSL 解密也能完美运行。
我看不到 SSL 握手的好坏有任何显着差异,直到 AD 服务器没有响应。
在这一点上我很难过......我真的很难理解为什么这会在某些时候失败并在其余时间工作,在这一点上我真的只是希望关于可能会发生什么的一些建议继续。
哦,是的,差点忘了。 Active Directory 事件日志中有错误:
事件 ID:36888 引发了以下致命警报:20。 内部错误为 960。
经过一番研究,我设法发现对应于 SSL“BAD_RECORD_MAC”错误。
此时我唯一的理论是,由于某种原因,错误的公钥被用于加密握手......我看不出为什么服务器(和 Wireshark)无法解密完成的消息。
谢谢!
更新:
我比较了坏情况和好情况,两种情况下的密码规范是相同的:TLS_RSA_WITH_AES_128_CBC_SHA。我还比较了来自客户端和服务器端的数据包,除了正常的以太网和 IP 协议差异外,它们看起来都相同。
【问题讨论】:
-
这很难从提供的数据中诊断出来。我建议从 cert 子系统和网络嗅探中并行获取一些日志记录(即,wireshark 或类似的)。这会有所帮助...
标签: java security ssl active-directory weblogic