我有一个使用ssl的openssl客户端。客户端之前正在与openssl服务器对话,一切都很好。我们现在正在用java重写服务器,我们看到了下面的情况。
1)连接到服务器工作
2)握手有效
3)第一个请求工作
4)第一个响应工作
5)第二个请求有效
6)第二次响应失败
7)第三个请求工作
8)第三次响应失败
第二个响应大约是130个字节的加密和(应该)大约100个字节的未加密。客户端成功地从tcp套接字中读取了所有这130个字节,但是在将其抛出SSL_read (类似于第一个响应)之后,它只输出了1个字节。调用SSL_get_error...just成功返回1字节后无错误。之后我直接调用SSL_pending,它返回0。
第三个响应现在返回-1 \f25 SSL_ERROR_SSL -1\f6 "decryption failed or bad record 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发布于 2012-07-03 07:37:08
你所依赖的东西是你不能依赖的。Java可能会以不同的方式将响应缓冲到其SSL层中,这将导致接收不同长度的SSL消息。您不能依赖任何通过SSL或TCP读取的长度,它们都是字节流协议,对于SSL,至少在API级别上是这样的。你必须循环阅读,直到你有了你需要的一切。
https://stackoverflow.com/questions/11301614
复制相似问题