美文网首页
openssl 鸿蒙接入遇到decryption failed

openssl 鸿蒙接入遇到decryption failed

作者: 爱玩保龄球 | 来源:发表于2024-09-19 10:16 被阅读0次
    • 问题
        - ff_log: [tls @ 0x5b19021280] error:1408F119:SSL routines:SSL3_GET_RECORD:decryption failed or bad record mac
    
    • 解决思路
      • 你遇到的 SSL alert fatal: bad record mac 错误通常表示在 SSL/TLS 记录的加密或解密过程中出现了问题。这意味着消息认证码(MAC)验证失败,表明接收到的数据可能被篡改或损坏。导致此问题的可能原因有以下几个:
        1. 密码套件不匹配
          客户端和服务器可能在协商不兼容的密码套件,导致加密或解密数据时失败。
          确保客户端和服务器支持相同的密码套件,并且使用现代、强大的加密算法。
          解决方法:可以使用 SSL_CTX_set_cipher_list 设置具体的密码套件,例如:
    SSL_CTX_set_cipher_list(p->ctx, "HIGH:!aNULL:!MD5");
    
      1. TLS 版本不兼容
        客户端和服务器可能使用了不同的 TLS/SSL 版本(例如,客户端使用 TLSv1.2,而服务器期望其他版本)。
        确保客户端和服务器支持并协商相同的 TLS 版本。你可以通过 SSL_CTX_set_min_proto_version 和 SSL_CTX_set_max_proto_version 来显式设置 TLS 版本。
        解决方法:例如,如果你想强制只使用 TLS 1.2,可以这样设置:
    SSL_CTX_set_min_proto_version(p->ctx, TLS1_2_VERSION);
    SSL_CTX_set_max_proto_version(p->ctx, TLS1_2_VERSION);
    
      1. 服务器端配置问题
        服务器可能配置不正确,在握手过程中发送了错误或不完整的响应,这可能导致消息损坏并失败 MAC 检查。
        查看服务器日志,确认是否有配置问题或不匹配的地方。
      1. 会话票据问题
        可能问题出现在服务器发放会话票据时,错误正好出现在 SSLv3 read server session ticket A 消息之后。
        会话票据用于客户端和服务器恢复 SSL 会话,但如果会话票据或其加密处理存在问题,可能会导致此类错误。
        解决方法:你可以尝试禁用会话票据,看是否能解决问题:
    SSL_CTX_set_options(p->ctx, SSL_OP_NO_TICKET);
    
      1. 证书或密钥文件问题
        确保服务器的证书和私钥配置正确,并且文件的完整性没有问题。
        检查证书和私钥是否匹配,并且已被正确加载到服务器中。
      1. MTU 或数据包分段问题
        有时候,这类错误可能是由网络问题引起的,例如 MTU(最大传输单元)不匹配或 SSL/TLS 数据包的分段问题。
        如果你所在的网络 MTU 较小,可以尝试使用 SSL_CTX_set_options 禁用压缩(SSL_OP_NO_COMPRESSION),以避免相关问题。
    • 总结
      由于我们使用的版本比较低,
      通过这段代码,明确指定了 SSL/TLS 上下文只能使用 TLS 1.2 协议。这对于确保安全性非常重要,
      因为旧版本的协议(如 SSL 3.0、TLS 1.0、TLS 1.1)存在许多已知的安全漏洞,而 TLS 1.2 是目前广泛使用的安全协议之一,通过设置1.2 解决
        SSL_CTX_set_ssl_version(p->ctx, TLSv1_2_method());
    

    相关文章

      网友评论

          本文标题:openssl 鸿蒙接入遇到decryption failed

          本文链接:https://www.haomeiwen.com/subject/ufyoljtx.html