我有一个openssl 客户端在说ssl。客户端之前正在与 openssl 服务器通信,一切都很好而且很花哨。我们现在正在用 java 重写服务器,我们看到了以下情况。
1) 连接到服务器 WORKS
2)握手工作
3) 第一个请求 WORKS
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