Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.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
JavaSSL:chrome/firefox在http头中发送“G”,而不是“GET/http/1.1”_Java_Google Chrome_Firefox_Ssl_Nanohttpd - Fatal编程技术网

JavaSSL:chrome/firefox在http头中发送“G”,而不是“GET/http/1.1”

JavaSSL:chrome/firefox在http头中发送“G”,而不是“GET/http/1.1”,java,google-chrome,firefox,ssl,nanohttpd,Java,Google Chrome,Firefox,Ssl,Nanohttpd,您好,我正在试用一个简单的java http服务器NanoHTTPD: 今天我尝试用HTTPS支持它,所以我在它的NanoHTTPD构造函数中创建了SSLServerSocket: // myServerSocket = new ServerSocket(myTcpPort); myServerSocket = SSLServerSocketFactory.getDefault().createServerSocket(myTcpPort); 还提供了带有2048位RSA密钥的javax.ne

您好,我正在试用一个简单的java http服务器NanoHTTPD:

今天我尝试用HTTPS支持它,所以我在它的NanoHTTPD构造函数中创建了SSLServerSocket:

// myServerSocket = new ServerSocket(myTcpPort);
myServerSocket = SSLServerSocketFactory.getDefault().createServerSocket(myTcpPort);
还提供了带有2048位RSA密钥的javax.net.ssl.keyStore

结果是https连接在MSIE6.0、MSIE8.0、Firefox 9.0.1上成功 但是,在Google Chrome 17.0.963.56 m和Firefox 10.0.1上失败:

通过调试,NanoHTTPD.HTTPSession.decodeHeader方法仅获取字符串inLine=G,仅获取一个字符,而通常在这里您会期望标准http头GET/http/1.1

所以任何熟悉Firefox的人都可以看出9.0.1和10.0.1中关于https/ssl的不同之处?浏览器制作的东西可能是重点。当然,我是java ssl编程的新手,请告诉我SSLServerSocket是否有错

我交叉发布了本期:


谢谢大家。

问题在于您的SSL实现被破坏了。SSL记录可以以任意方式拆分,Google和Mozilla改变了拆分记录的方式,以解决一些针对SSL的MITM攻击。具体地说,在发送第二个SSL记录和其余数据之前,先发送一个1字节的SSL记录。听起来SSL实现只是读取第一条记录,而不是读取所有数据


请参阅和类似的文章

我可以确认,默认情况下,来自java的SSLEngine已损坏。我可以绕过它的方式是:

^Cpck0:bin vladimirralev$ /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --disable-ssl-false-start --use-spdy=off --use-system-ssl
这就关闭了奇怪的TLS模式


如果你继续按照它给你的指令去读一个分段的数据包,那么最近的SSLEngine看起来会正常工作。您必须循环多次读取,其间有一些间歇状态,最终您将获得完整的块。

如果您能让所有用户更改浏览器设置以降低安全性就好了。不过,这对调试很有帮助。