2015-10-15 132 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