【问题标题】:Bad MAC after porting OpenSSL 1.0.2 to ECOS将 OpenSSL 1.0.2 移植到 ECOS 后 MAC 错误
【发布时间】:2015-08-29 22:48:39
【问题描述】:

我们的嵌入式系统上运行着一个 OpenSSL,它正在运行 ECOS OS。我们现在正在将我们的 OpenSSL 升级到 1.0.2 版本。我们已经成功移植和编译了 OpenSSL 库。但是,当我们尝试使用 SSL(通过 https)连接我们的设备时,握手失败并总是出现错误记录 mac 警报。我们已启用 OpenSSL 调试选项,但无法确定其失败的原因。

有人将最新的 OpenSSL 代码移植到 ECOS 吗?我们是否需要为 ECOS 使用带有最新 OpenSSL 代码的任何特殊编译标志?

供参考,这里是ssl3_get_record的相关部分:

mac = rr->data + rr->length;
i=s->method->ssl3_enc->mac(s,md,0 /* not send */);
if (i < 0 || CRYPTO_memcmp(md, mac, (size_t)mac_size) != 0)
    {
    al=SSL_AD_BAD_RECORD_MAC;
    SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC);
    goto f_err;
    }

【问题讨论】:

  • 感谢您的信息,也使用 1.0.2 进行了测试,仍然遇到同样的问题。请注意,我们在嵌入式系统上运行的 ECOS 没有文件系统。如果我们错过了一些编译标志,那么会徘徊吗?
  • 我不确定您是否缺少任何$cflags$ldflags,因为您没有提供它们:) 您的Configure triplet 是什么(我想您添加了一个自定义的)?用于配置库的other options 是什么?您的 ROM 是否有空间进行自检?即使它是一次性构建以确保库正确构建和执行....
  • 另外,您在 eCos 网站上看到 Andrew Lunn of Ascom has made available a port of the OpenSSL library.... 了吗?它可能具有带有自定义 cflags$ldflags 设置的配置三元组。
  • 我们已经在使用 1.9.6 b 的安德鲁端口了。由于 SSL 中最近存在漏洞,我们必须升级我们的 SSL 以支持更高版本。即TLS1.1 和 TLS1.2。
  • 哦,升级做得很好:) 他使用的Configure 三元组是什么?它可能是自定义的,所以只需使用它。 (然后将代码捐赠回 eCos 社区以帮助他人)。

标签: ssl openssl cryptography embedded ecos


【解决方案1】:

调试后,我们发现随机库 (RAND) 无法用于 ECOS。 OpenSSL 中有很多地方检查 random_bytes 返回类型。由于此故障,预主密钥解密失败。并且传入的数据包没有正确解密。因此出现了 BAD Mac 记录错误。

我们还检查了我们的旧移植代码 (0.9.6),RAND 库在那里也失败了,但是我们没有返回检查 random_bytes 和 pseudo_rand_bytes。作为修复,我们让 RAND 每次都返回成功,我们可以看到 SSL 会话在 OpenSSL 1.0.2 版本中建立良好。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2019-09-13
  • 1970-01-01
  • 1970-01-01
  • 2015-08-20
  • 1970-01-01
  • 1970-01-01
  • 2010-11-08
  • 2015-11-04
相关资源
最近更新 更多