我们的嵌入式系统上运行的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;
}
答案 0 :(得分:1)
调试后,我们发现随机库(RAND)失败了ECOS。 OpenSSL中有很多地方检查random_bytes返回类型。由于此故障,预主密钥解密失败。并且传入的数据包未正确解密。因此看到了BAD Mac记录错误。
我们还检查了旧的移植代码(0.9.6),RAND库也在那里失败,但我们没有返回检查random_bytes和pseudo_rand_bytes。作为修复,我们每次都让RAND成功返回成功,我们可以看到使用OpenSSL 1.0.2版本建立的SSL会话很好。