我在Java
中编写了一个简单的程序,该程序从浏览器(如Firefox)接收连接请求,解析对统计信息的请求,然后将请求转发到原始目的地。然后,程序从目标读取响应,解析响应以获取统计信息,然后将响应转发给浏览器。
此操作的伪代码如下:
// Accept connection from browser and read request
1. Socket browserConnection = serverSocket.accept();
2. browserConnection.getInputStream().read(buffer);
3. SocketInetAddress destInetAddress = parseHttpRequest(buffer);
// Connect to destination and forward request
4. Socket destConnection = new Socket(destInetAddress);
5. destConnection.getOutputStream().write(buffer);
// Read response from destination
6. destConnection.getInputStream().read(buffer);
7. parseHttpResponse(buffer);
// Forward response to browser
8. browserConnection.getOutputStream().write(buffer);
这对于HTTP连接非常有效,但是对于HTTPS连接,我却得到了
connection reset
。注意:我知道HTTP和HTTPS连接之间的区别,与HTTP不同,它不仅是一次性的
send
,然后是一些receives
。我的HTTPS reads
代码和所需的writes
一样多。为什么我尝试从任何HTTPS服务器(例如https://www.google.com,https://www.comodo.com等)重置连接?
最佳答案
HTTPS的安全性可以防止中间人攻击的发生。您所谈论的,无论它是否合法,都是中间人攻击的样子。使用HTTPS,您不仅可以截获发往另一个目的地的数据包并读取它们。但是,您可以将数据包对准您,为客户端提供安全证书,对数据包进行解码,对它们进行任何操作,对它们进行重新编码,然后将其传递到另一个目标。区别在于,客户必须知道您的存在以及您是谁。否则,它将无法使用HTTPS与您通信。
关于java - Java HTTPS连接转发,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14153662/