gpt4 book ai didi

openssl - TLS1.2 上的 bad_record_mac 问题

转载 作者:行者123 更新时间:2023-12-04 15:42:22 25 4
gpt4 key购买 nike

我们遇到了一个关于 openldap + openssl 的问题。

当多线程客户端(30 个线程)确实连接到 OPENLDAP 服务器时,服务器端在 TLS 握手时随机出现“Bad Record MAC”错误。

env
openldap+openssl TLS
RHEL7.5 openssl 1.0.2k
openldap2.4.43

TLS configure
The TLS configures are: TLS1.2 , ssf=128 and Cipher_Suite="AES:!NULL:!EXPORT"

Error connection
Error connection progress are
client->server: Client Hello
server->client:Server Hello, Certificate, Server Hello Done
client->server: Client key Exchange
client->server: change cipher spec
client->server: Encryted Handshake Message
Server->client: Alert(Level: Fatal, Decription: Bad Record MAC)env
openldap+openssl TLS
RHEL7.5 openssl 1.0.2k
openldap2.4.43

什么时候
当多线程客户端(30 个线程)连接 OPENLDAP 服务器时,服务器端在 TLS 握手时出现“Bad Record MAC”错误
.
频率如何
对于零件连接,此问题随机发生。
TLS configure
The TLS configures are: TLS1.2 , ssf=128 and Cipher_Suite="AES:!NULL:!EXPORT"

Error connection
Error connection progress are
client->server: Client Hello
server->client:Server Hello, Certificate, Server Hello Done
client->server: Client key Exchange
client->server: change cipher spec
client->server: Encryted Handshake Message
Server->client: Alert(Level: Fatal, Decription: Bad Record MAC)

最佳答案

“Bad Record MAC”基本上意味着传入的数据由于某种原因是坏的。例如数据包损坏。

由于您提到的“多线程”,我看到的错误记录 MAC 的首要原因是在多线程上下文中滥用 OpenSSL 库。OpenSSL 不支持多线程同时使用 SSL 句柄. “Bad Record MAC”通常是由于在使用 OpenSSL SSL 句柄时从不同线程更新而导致数据包数据损坏的结果。即 OpenSSL 句柄不是线程安全的。

多个 OpenSSL 句柄在彼此使用之间是线程安全的,但单个句柄不是线程安全的。

看到这个 Blob article就此主题而言。

所以一个常见的错误是允许有两个线程用于单个 SSL 句柄,一个用于读取,一个用于写入(即像套接字句柄所允许的那样)并认为没问题。使用 SSL 则不然。您确实需要一个线程(或运行上下文,例如 boost asio 链)来使用所有 SSL 句柄用法,以便不会同时发生两个 SSL 句柄 API 调用。

关于openssl - TLS1.2 上的 bad_record_mac 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57373632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com