2015-10-15 190 views
0

我已经构建了用于捕获所有HTTP请求的Android代理服务器。我也收到HTTPS,其中我不感兴趣,但我只是想通过它们。Android的代理服务器 - 处理HTTPS

根据http://muffin.doit.org/docs/rfc/tunneling_ssl.html 当SSL连接通过代理进入时,HTTP方法是CONNECT。为此,我送响应客户端:

  if (request.startsWith("CONNECT")) { 
      proxyOutputStream.write(("HTTP/1.1 200 Connection established" + CRLF + CRLF).getBytes()); 
      proxyOutputStream.flush(); 

,然后启用双向连接:

   DirectionalConnectionHandler client = new DirectionalConnectionHandler(mProxySocket, mOutsideSocket); 
      client.start(); 
      DirectionalConnectionHandler server = new DirectionalConnectionHandler(mOutsideSocket, mProxySocket); 
      server.start(); 

但是“建立连接”原因“ERR_SSL_PROTOCOL_ERROR”错误的浏览器。 如果我不发送“建立连接”响应,错误是ERR_TUNNEL_CONNECTION_FAILED

应该做些什么来启用正常的HTTPS连接并且不会中断浏览器?

+0

您需要先建立上游连接。然后将其成功或失败状态交付给客户。目前,你只是向客户说谎,连接成功,当你还没有尝试过。 – EJP

回答

-1

代理模式下不需要回应HTTP/1.1 200 Connection established

删除以下代码,

proxyOutputStream.write(("HTTP/1.1 200 Connection established" + CRLF + CRLF).getBytes()); 
proxyOutputStream.flush(); 
+0

这不提供问题的答案。要批评或要求作者澄清,请在其帖子下方留言。 – Mogsdad

+0

然后我留在ERR_TUNNEL_CONNECTION_FAILED。 –

+0

@Mogsdad它不提供*正确*的问题的答案。 [RFC 2817](https://www.ietf.org/rfc/rfc2817.txt)明确指出对CONNECT命令有响应, – EJP