Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的SSL协议_Java_Ssl - Fatal编程技术网

Java中的SSL协议

Java中的SSL协议,java,ssl,Java,Ssl,我正在使用org.apache.commons.ssl在Java中创建一个ssl服务器。 我面临一个奇怪的问题:我通过SSL流发送500KB的数据,在客户端接收500KB的数据,但通过TCP连接传输的数据要大20倍。 原因可能是什么?SSL参数的错误配置 我在测试中使用了一个真正可信的SSL证书。 我试图用Wireshark嗅探并解码SSL流,但没有成功,我无法看到解码后的数据。或者可能流被编码在多个过程中? TCP数据包每个为1525字节。我看不出有什么异常 如果有人有主意。。。 谢谢 Oli

我正在使用org.apache.commons.ssl在Java中创建一个ssl服务器。 我面临一个奇怪的问题:我通过SSL流发送500KB的数据,在客户端接收500KB的数据,但通过TCP连接传输的数据要大20倍。 原因可能是什么?SSL参数的错误配置

我在测试中使用了一个真正可信的SSL证书。 我试图用Wireshark嗅探并解码SSL流,但没有成功,我无法看到解码后的数据。或者可能流被编码在多个过程中? TCP数据包每个为1525字节。我看不出有什么异常

如果有人有主意。。。 谢谢
Olivier

听起来像是通过网络一次只发送一个字节。然后,开销就是TCP/IP数据包封装。

重新协商不会导致20倍的爆炸。您是否在SSL套接字的两个方向的输出流周围使用
BufferedOutputStreams
?i、 e.在服务器和客户端?如果您不使用缓冲输出,并且代码一次写入一个字节,那么您可以看到由于SSL记录协议导致的40x爆炸,以及从几何角度看,由于TCP段开销导致的另一个40x爆炸;后者通常通过Nagle算法得到缓解,但有些人关闭了它,这有点过于强烈了。EJP:你是对的,我在代码中犯了一个错误:我将一个
BufferedUputStream
包装在一个
SomeStuffOutputStream
周围,而不是将
SomeStuffOutputStream
包装在
BufferedUputStream
周围。
BufferedOuputStream
必须处于最低级别,就在原始套接字的
OutputStream
之上

现在它工作得很好

这是一个误解,我刚刚开始理解为什么我看到了“正常”的数据包大小,因为SSL协议的东西。下次我会更小心:)


感谢大家。

开销是SSL记录封装,对吗?每个SSL记录中有1字节的应用程序数据。可能是。我不熟悉SSL的内部结构。嗨,这是我首先想到的,但事实并非如此。通过SSL套接字使用BufferedOutputStream完成对套接字的写入,并且在写入500K之后调用flush()方法一次。使用Wireshark,我可以看到每个TCP数据包大约有1400字节(不记得确切的数字)。问题似乎只发生在一个方向:从服务器到客户端(下载),而不是从客户端到服务器(上传)。使用openssl从shell测试我的应用程序,我看到了一些关于“重新谈判”的奇怪东西。有什么想法吗?谢谢您多久在流上调用一次
flush()
?您可能想发布将数据写入套接字的代码。这种解释通常在原始问题中进行编辑,而不是作为单独的答案。