1

我正在用 Ruby 编写一个 SMTP 服务器,我试图找出处理 SSL/TLS 错误“解密失败或坏记录 mac”的正确方法是什么

重试操作会从#read_nonblock 中吐出随机垃圾,除了粗鲁和关闭连接之外,我不知道该怎么办

4

2 回答 2

3

您自己是这里的服务器,该消息将表明 OpenSSL 无法正确解密客户端发送的 TLS 记录,或者 MAC 计算失败,即客户端的标签与您计算的标签不匹配。

除了错误或网络错误(如 EJP 所述)外,如果有人主动更改了发送的内容、发送了错误的消息或仅发送了部分消息等,也会发生这种情况。

无论如何,作为服务器,您不想尝试挽救这样的连接。毕竟,这可能是一次攻击。处理此事件的正确方法是调用SSLSocket#closewhich 将尝试执行 a SSL_shutdownwhich 将再次尝试向客户端发送“关闭通知”警报,这是告诉对等方您即将关闭它的优雅 TLS 方式联系。

为了恢复与发生这种情况的客户端的通信,您将协商一个从头开始的新连接。

于 2012-06-17T15:13:13.770 回答
2

你不能处理它。这是您的 SSL 库或对等方的错误,或者是极不可能的网络错误。只需关闭连接。

于 2012-06-16T19:06:12.803 回答