隧道:ssl 到 ssl

隧道:ssl 到 ssl

我有一個小服務,只監聽https://本地主機:41952並檢查來源主機名稱(必須是 localhost)。我想連接“listen:1988”並將帶有 stunnel 的請求重定向到“localhost:41952”

https://192.168.1.10:1988 -> redirect https://localhost:41952

目前配置:

[myservice]
cert = stunnel.pem
accept = 0.0.0.0:1988
connect = localhost:41952

openssl_client 日誌:

http://pastebin.com/7bg3sf7J

請注意,此憑證與 localhost:41952 上的憑證不同。

捲曲測試:

$ curl https://192.168.1.17:1988/DYMO/DLS/Printing/Check -vk
*   Trying 192.168.1.17...
* Connected to 192.168.1.17 (192.168.1.17) port 1988 (#0)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
* Server certificate: localhost
> GET /DYMO/DLS/Printing/Check HTTP/1.1
> Host: 192.168.1.17:1988
> User-Agent: curl/7.43.0
> Accept: */*
> 

永遠等待。

也許我需要client = yes?但我沒有任何證書,除非我從服務網站上的 Firefox 匯出https://本地主機:41952

我原來的問題:

適用於 Windows 的免費反向代理和 SSL

答案1

stunnel 是一個在非 SSL 和 SSL 之間建立網關的程式。來自主頁上的描述

Stunnel 是一個代理,旨在為現有客戶端和伺服器添加 TLS 加密功能,而無需更改程式碼

此工具並非設計用於建立從 SSL 到 SSL 的網關。在你的情況下你需要的只是一個簡單的 TCP 轉發器,可以用索卡特

socat TCP4-LISTEN:1988,fork TCP4:127.0.0.1:41952

使用此轉發器,與 192.168.1.17:1988 的連線將轉送至 127.0.0.1:41952。客戶端將從伺服器取得原始證書,因為轉送是在 TCP 層級完成的。伺服器將看到來自 127.0.0.1 的連線。

編輯:經過大量溝通,現在很清楚,目標不是在問題中聲明正確的來源主機名,而不是響應中聲明的正確的引用者,而是主機 HTTP 請求標頭具有預期值“localhost” '。由於主機標頭是從 URL 設定的,因此您需要確保請求轉發到遠端系統,並且瀏覽器不會嘗試自行解析 URL,否則它會嘗試連接到所在電腦上的伺服器瀏覽器正在執行。要將 URL 解析推遲到目標系統,您需要在那裡運行代理,即您嘗試過的 Charles 代理或某些 SOCKS 代理。

答案2

所以要連接到https://192.168.1.10:1988並到達在 IP 192.168.1.10 的主機上偵聽環回介面的連接埠 4952 的 SSL 服務:

我們需要 2 個 stunnel 節來實現我們想要的。

[myservice]
cert = stunnel.pem
client = no
accept = 0.0.0.0:1988
connect = localhost:1987

[myserviceaux]
cert = stunnel.pem
client = yes
accept = localhost:1987
connect = localhost:4952

我唯一無法實現的是將 stunnel 中的所有請求的標頭主機修改為 localhost。

從curl 來看,它運作得很好:

$ curl https://192.168.1.10:41951/DYMO/DLS/Printing/Check -k -H "Host: localhost"

答案3

我已經解決了類似的HTTPS-TO-HTTPS問題視窗用這個指令:

netsh interface portproxy add v4tov4 listenport=443 listenaddress=127.0.0.1 connectport=[remote-https-port] connectaddress=[remote-ip]

相關內容