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

时间:2015-06-14 10:25:20

标签: ssl openssl cryptography embedded ecos

我们的嵌入式系统上运行的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 :(得分:1)

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

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