【问题标题】:What is the correct way to handle an OpenSSL error of the type "decryption failed or bad record mac"?处理“解密失败或坏记录 mac”类型的 OpenSSL 错误的正确方法是什么?
【发布时间】:2012-06-16 15:43:36
【问题描述】:

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

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

【问题讨论】:

    标签: ruby openssl ssl


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      你无法应付。这是您的 SSL 库或对等方的错误,或者是极不可能的网络错误。只需关闭连接即可。

      【讨论】:

        猜你喜欢
        • 2015-06-13
        • 1970-01-01
        • 1970-01-01
        • 2013-07-05
        • 2014-05-10
        • 1970-01-01
        • 1970-01-01
        • 2021-03-30
        • 2012-08-06
        相关资源
        最近更新 更多