将OpenSSL 1.0.2移植到ECOS后出现错误的MAC

将OpenSSL 1.0.2移植到ECOS后出现错误的MAC,ssl,openssl,cryptography,embedded,ecos,Ssl,Openssl,Cryptography,Embedded,Ecos,我们的嵌入式系统正在运行OpenSSL。我们现在正在将OpenSSL升级到1.0.2版本。我们已经成功地移植和编译了OpenSSL库。但当我们尝试使用SSL(通过https)连接设备时,握手失败,mac警报总是记录错误。我们已经启用了OpenSSL调试选项,但无法确定其失败的原因 有人将最新的OpenSSL代码移植到ECOS吗?我们是否需要为ECOS的最新OpenSSL代码使用任何特殊的编译标志 以下是ssl3\u get\u记录的相关部分,以供参考: mac=rr->data+rr->leng

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

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

以下是
ssl3\u get\u记录的相关部分,以供参考:

mac=rr->data+rr->length;
i=s->method->ssl3_enc->mac(s,md,0/*不发送*/);
如果(i<0 | | CRYPTO_memcmp(md,mac,(size_t)mac_size)!=0)
{
al=SSL\u AD\u BAD\u记录\u MAC;
SSLerr(SSL\u F\u SSL3\u获取\u记录、SSL\u R\u解密\u失败\u或\u坏记录\u MAC);
走错了;
}

调试后,我们发现随机库()对于ECO失败。在OpenSSL中有很多地方它会检查随机字节返回类型。由于此故障,预主密钥解密失败。并且传入的数据包没有正确解密。因此,出现了一个坏的Mac记录错误


我们还使用旧的移植代码(0.9.6)进行了检查,RAND库在那里也失败了,但在那里我们没有对随机字节和伪随机字节进行返回检查。作为一个修复,我们让兰德每次都返回成功,我们可以看到SSL会话在OpenSSL 1.0.2版本中建立得很好

感谢您提供的信息,同样使用1.0.2进行了测试,仍然收到相同的问题。请注意,在嵌入式系统上运行的ECOS没有文件系统。那么,如果我们缺少一些编译标志呢?我不确定您是否缺少任何
$cflags
$ldflags
,因为您没有提供它们:)您的(我想您添加了一个自定义的)是什么?使用什么配置库?您的ROM是否有进行自检的空间?即使它是一个一次性的构建,以确保库的构建和执行正确…还有,你在eCos网站上看到了吗?它可能具有带有自定义
cflags
$ldflags
设置的配置三元组。我们已经在使用andrew的旧端口1.9.6b。由于SSL最近存在漏洞,我们必须升级SSL以支持更高版本。TLS1.1和TLS1.2.噢,升级得不错:)他使用的
Configure
三元组是什么?这很可能是一种习惯,所以使用它吧。(然后将代码捐赠给eCos社区以帮助其他人)。“作为一个修复,我们让RAND每次都返回成功…”-也许我分析错误,但这听起来像是一个非常糟糕的主意…重新措辞,当我说RAND library不工作时,我们可以看到生成的随机字节,但由于一些熵失配,它总是返回失败。在旧的ECOS OpenSSL端口中也不起作用。一旦我们知道失败的原因,我们将更新答案。您现在处于一个不舒服的位置。我认为您可以做的更好的事情之一是修改OpenSSL并合并套期保值。有关论文,请参见和。对冲遵循古特曼的投资哲学。这肯定会帮助你避免你正在经历的失败。非常感谢杰夫,我一定会试试这个。