如何调试TLS实现

时间:2014-05-30 15:11:14

标签: google-chrome debugging firefox ssl openssl

我正在编写一个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实现的工具?

2 个答案:

答案 0 :(得分:2)

我在同一条船上,将嵌入式TLS 1.0实施更新到TLS 1.2。我发现Wireshark非常适合我进行故障排除。

进入Wireshark首选项协议/ SSL。从RSA密钥列表中,您可以为其提供您在服务器上使用的私钥(在我的示例中为.pem文件)的路径。使用SSL调试文件配置Wireshark,它将为它解密的每个数据包转储扩展的调试信息。

现在,我发现我的AES256解密已经破解,因为Wireshark的解码方式与我的实现方式不同。早些时候,我在AES128连接上获得了正确的明文,并且不得不解决我的MAC计算的一些问题(或者完成的消息,不能回想起哪些)。没有Wireshark,很难知道解密或MAC步骤是否失败。

答案 1 :(得分:1)

首先tcpdump所有连接,并确保你没有错过一些协议,如握手,更改密码规范等,然后打开firfox调试选项和gdb firefox打印masterkey,以及6键配对,并在您自己的实现中打印这些东西,然后您可以找到答案。