gpt4 book ai didi

java - SSL_read 第二次失败

转载 作者:太空宇宙 更新时间:2023-11-03 14:19:24 24 4
gpt4 key购买 nike

我有一个使用 ssl 的 openssl 客户端。客户端之前正在与 openssl 服务器通信,一切都很好。我们现在正在用 Java 重写服务器,我们看到发生了以下情况。

1) 连接到服务器 WORKS

2) 握手有效

3) 第一个请求成功

4) 第一个响应有效

5) 第二个请求成功

6) 第二次响应失败

7) 第三个请求成功

8) 第三次响应失败

第二个响应大约有 130 字节加密,(应该)有大约 100 字节未加密。客户端成功地从 tcp 套接字读取了所有这 130 个字节,但是在它抛出 SSL_read 之后(如第一个响应),它只输出 1 个字节。调用 SSL_get_error 后没有错误...成功返回 1 个字节。之后我直接调用 SSL_pending,它返回 0。

第三个响应现在返回 -1 SSL_ERROR_SSL“解密失败或错误记录 mac”

我是 openssl 的新手,我已经为这个问题奋斗了几个小时。任何想法将不胜感激

更新:相关代码

...
BIO* bio = BIO_new_mem_buff(sbuf, bufoutlen);
BIO_set_mem_close(bio,BIO_NOCLOSE);
ssl->rbio=bio;
int len = SSL_read(ssl, bufout, sbuflen); //<<return 1 even though buf has 130bytes
printf("pending=%d\n",SSL_pending(ssl)); //<<returns 0

最佳答案

你依赖的是你不能依赖的东西。 Java 可能会将响应以不同方式缓冲到其 SSL 层中,这将导致接收到不同长度的 SSL 消息。您不能依赖通过 SSL 或 TCP 进行的任何读取的长度,它们是字节流协议(protocol),至少在 API 级别的 SSL 情况下。您必须循环阅读,直到获得所需的一切。

关于java - SSL_read 第二次失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11301614/

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