3

我们在运行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;
    }
4

1 回答 1

1

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

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

于 2015-06-19T09:08:16.670 回答