我们在运行ECOS OS的嵌入式系统上运行一个OpenSSL。我们现在正在将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;
}发布于 2015-06-19 17:08:17
调试后,我们发现随机库(RAND)对于ECOS是失败的。在OpenSSL中有很多地方可以检查random_bytes返回类型。由于此故障,预主密钥解密失败。并且传入的数据包没有被正确解密。因此,出现了坏的Mac记录错误。
我们还检查了我们的旧移植代码(0.9.6),兰德库也失败了,但我们没有返回检查random_bytes和pseudo_rand_bytes。作为一个修复,我们让RAND每次都返回成功,我们可以看到OpenSSL 1.0.2版本可以很好地建立SSL会话。
https://stackoverflow.com/questions/30828257
复制相似问题