2016-01-14 18 views
1

socat端口轉發我可以使用socat的端口轉發這樣的:用於HTTPS

socat TCP4-LISTEN:8080 TCP4:123.456.789.12:80 

在這種情況下,它完美的作品:所有http -REQUESTS到localhost:8080將被重定向到123.456.789.12:80

但我怎樣才能使用這樣的轉發https-請求?

更新:我需要Firefox和遠程服務器之間的一個socat進程。 socat只是一個轉發器(代理重定向器),僅此而已。這樣的事情:

Firefox -> socat -> server 
     ------------> 
      https 
+0

你試過[這個食譜](http://www.dest-unreach.org/socat/doc/socat-openssltunnel.html)嗎? – Thor

+0

我沒有兩個'socat',只有一個'socat'和Firefox。所以我不明白那個配方... –

+0

我只需要從Firefox(通過'socat')將'https'-請求重定向到遠程服務器。 'ssl'連接應該在Firefox和服務器之間,'socat'只是一個重定向器,僅此而已。當我嘗試命令'socat TCP-LISTEN:8081,fork,reuseaddr OPENSSL:123.456.789.123:80,verify = 0'時,出現錯誤「錯誤:140770FC:SSL例程:SSL23_GET_SERVER_HELLO:未知協議」。 –

回答

3

通常HTTPS服務器在端口443上運行,所以也許這是你的問題?

試圖通過socat瀏覽到google.com以https工作,儘管有一個SSL證書警告:

socat TCP-LISTEN:8080,fork,reuseaddr TCP:google.com:443 

(使用forkreuseaddr允許多個連接和快速IP:端口複用,但beaware of the caveats) 。

現在你可以通過瀏覽器訪問谷歌的https,只需要去https://localhost:8080

+0

感謝您的回答,但它不適合我的任務。我*做*需要一個安全的連接(理想情況下沒有任何SSL證書警告)! Firefox應該通過'socat'與遠程服務器建立如此安全的連接,就好像沒有'socat'一樣。 'socat'只是一個轉發器(轉向器),僅此而已。 –

+2

@DenisShevchenko:據我所知,您將無法避免證書警告,因爲您正在將瀏覽器指向運行'socat'的服務器,該服務器與證書不匹配。這是SSL協議的一個設計特徵,用於避免中間人攻擊。 – Thor

0

不幸的是,socat不能用於這樣的任務。我應該使用真正的HTTP代理服務器而不是socat

3

您得到的瀏覽器安全警告是由於URL和服務器證書中的主機名稱不匹配(例如,localhostexample.com)。

要使轉發工作沒有此警告,您需要將轉發器放在同一個TCP端口上並覆蓋受影響域的DNS解析(即,使01​​解析爲127.0.0.1)。

最簡單的方法如下:

  1. 編輯您的hosts file,並添加example.com域到本地主機線(排序HOWTO的是here

  2. 開始您的轉發(注意,你需要使用服務器IP地址,而不是域名,因爲域名已被重定向到本地主機)

    socat TCP-LISTEN:443,fork,reuseaddr TCP:123.456.789.12:443

  3. 檢查它在瀏覽器中通過https://example.com

使用時,不要忘記刪除從主機域條目做實驗時文件。


如果你不能保證同一個TCP端口號,這種方法可能會奏效,以及 - 但只有在某些條件下:

  • 的網站使用環節相對路徑(如絕對路徑將使用原始(因此不同)端口號)

  • 有寫入的服務器證書中沒有端口號(這通常不是這種情況)


注意:可以設置一個MITM socat代理,但這需要添加一個仿真可信的CA.

祝你好運!