【发布时间】:2017-12-06 11:41:42
【问题描述】:
您好:我正在尝试制作一个主要使用 JAVA 的小型 HTTPS 客户端程序。
下面是sn-p的代码:
SSLSocket result = (SSLSocket) SSLCont.sslSocketFactory.createSocket(
sockfd, "www.facebook.com", 443, false);
result.startHandshake();
result.getOutputStream().write("GET / HTTP/1.1\r\nHost: www.facebook.com\r\n\r\n".getBytes());
String res=my.getData(result.getInputStream());
print(res);
我可以正确打印 Facebook 回复。没有问题。
问题是 - 当我使用“TRAFFIC capture”程序看到流量时,我看到“TLS:TLS Rec Layer-1 HandShake: Client Hello”的以下数据。部分
TLS:TLS Rec Layer-1 HandShake: Client Hello.
. .....ÿÿÿÿ.............ïM©.LoÓ....??ÞÐJd:Ôn..¡.?ÞÐJd:..ªª.....
.E..ë.×@.@.».À¨.eð.$?6.»§.Îç?ç.?P.ý\?-
......¾...º..???v????{3?¯ß.DÅJ.>?÷®ÿ±û*^».8i1...À+À/̨̩À,À0À.À.À
.À..3.9./.5.....s.........www.facebook.com....ÿ.
........................#...............................
..........................
但是当我直接在浏览器中打开网站( www.facebook.com )时,我会看到以下流量:
TLS:TLS Rec Layer-1 HandShake: Client Hello.
. .....ÿÿÿÿ.............ïM©.LoÓ....??ÞÐJd:Ôn..¡.?ÞÐJd:..ªª.....
.E..ë.×@.@.».À¨.eð.$?6.»§.Îç?ç.?P.ý\?-
......¾...º..???v????{3?¯ß.DÅJ.>?÷®ÿ±û*^».8i1...À+À/̨̩À,À0À.À.À
.À..3.9./.5.....s.........www.facebook.com....ÿ.
........................#.........h2.http/1.1...........
..........................
如果我们仔细比较两个流量数据,我们会看到,如果是 Chrome 浏览器生成的流量,我们会看到以下额外的字符串 "..h2.http/1.1...." 最后附加,这表明它是用于 HTTP 并且看起来很完美。
但是这个字符串并没有附加到我的 java 程序生成的流量中。
您能否告诉我为什么“..h2.http/1.1....”字符串没有出现在我的 java 程序生成的流量中。 如何修改我的java代码,使字符串出现在我的java程序生成的请求流量中。
注意:但是当我使用 java 内置类“HttpsURLConnection”打开该网站时,我看到“..h2.http/1.1....”存在在交通。 此问题适用于所有 HTTPS 网站。
你能告诉我我的 Java 代码中缺少什么吗?
提前谢谢你
【问题讨论】:
标签: java sockets ssl openssl traffic