按顺序创建Java HTTPS代理以记录HTTP流量

时间:2013-12-18 17:06:19

标签: java https proxy network-programming

我正在实现我自己的代理以记录HTTP流量。 从我到目前为止所研究的内容来看,这并非易事,因为第一个请求(CONNECT)是在没有HTTP加密的情况下完成的(在端口443上 - 使用常规服务器套接字)继续隧道连接到HTTP上的SSL(HTTPS),需要由安全服务器套接字(取自SLServerSocketFactory)。

换句话说,我需要在第一个CONNECT请求之后将实现从非安全服务器套接字切换到安全服务器套接字。

除此之外,我正在使用基于服务器证书的自定义密钥库和信任库(此步骤没有问题)。

欣赏您的想法或您可能拥有的任何示例。

1 个答案:

答案 0 :(得分:-1)

这是非常微不足道的。

  1. 从接受的套接字中读取一行。这就是CONNECT。获取目标主机。
  2. 连接目标。这是“上游”连接,另一个是“下游”连接。
  3. 如果失败,请发回适当的HTTP响应并关闭套接字。
  4. 否则,启动两个线程,一个从下游复制字节到上游,另一个从上游复制到下游。
  5. 当您在其中一个线程中的套接字上读取EOS时,请关闭它写入的套接字以进行输出并退出该线程。
  6. 执行此操作时,请检查您所读取的套接字是否已关闭以进行输出。如果有,请在退出线程之前关闭两个套接字。
  7. 因此,当在两个方向上读取EOS时,两个套接字都被关闭,两个线程都已退出。这种关闭技术可以解决所有可能的保持活动困难。

    当你复制字节时,你并不在乎它们中的什么。客户端将使用上游服务器执行所有SSL操作。你不需要了解它。