【发布时间】:2014-05-30 15:11:13
【问题描述】:
我正在编写一个 TLS 实现,并且已经在服务器完成消息中停留了数周。 Openssl s_client 报错:
5820:错误:1408F119:SSL 例程:SSL3_GET_RECORD:解密失败或 坏记录 mac:.\ssl \s3_pkt.c:483:
这不是很有帮助,因为我无法追踪 MAC 或加密过程的任何错误。
Chrome 报错:
5820:错误:1408F119:SSL 例程:SSL3_GET_RECORD:解密失败或 坏记录 mac:.\ssl \s3_pkt.c:483:
而 Firefox 说:
无法与对等方安全通信:没有通用加密 算法。 (错误代码:ssl_error_no_cypher_overlap)
GNUtls-debug 更糟糕
拉取函数出错。
我已将可疑列表缩小到错误的 des3/aes256 实现(迄今为止我尝试过的唯一一个)或错误的 MAC,但我不能确定,并且已经检查过代码,感觉像是一千次都没有发现任何邪恶的事情发生。
问题
有没有办法让任何浏览器给出完整而详细的 SSL 错误?我只需要一份详细可靠的错误消息/调试日志。
是否有任何工具可用于调试 TLS 实现?
【问题讨论】:
-
我认为对低级 TLS 协议工具的需求并不大,因为实现 TLS 的人并不多。我将在启用调试的情况下构建
openssl可执行文件,在调试器中运行s_client,并在ssl3_get_record()中的每个decryption_failed_or_bad_record_mac = 1上设置一个断点。 Wireshark 会做一些 SSL/TLS 解析,但我的猜测不是你想要的深度。您的服务器在互联网上吗? -
我的服务器目前不在线。我将在启用调试的情况下构建 openssl。
-
我感受到你的痛苦。我前段时间写了一个 TLS 1.0/1.1 代理,并在这一步上挣扎了很长时间。我最终对我的交易进行了数据包捕获,然后手动计算所有值应该是什么。这花了很长时间,但是通过在我的代码中记录所有相关值,我可以手动计算出哪里出错了。我遇到的一些问题:
-
...
我遇到的一些问题:正确捕获所有握手消息(但不是更改密码规范消息),从密钥材料中获取正确的加密密钥和 MAC 密钥,调用加密库正确用于加密和 MAC 功能,并使用来自客户端的解密完成消息来计算来自服务器的完成消息。也许这里的某些东西会触发一个对您有帮助的想法。
标签: google-chrome debugging firefox ssl openssl