這是交易:
- 我們的客戶端軟體只能使用http協定連接,不能使用https。
- 然而,安全要求決定了端到端的安全性,因此我們在與伺服器通訊時需要使用 https。
- 現在我已經能夠透過使用在測試環境中做到這一點隧道具有以下配置:
stunnel.conf 檔案:
[mylocalproxy]
client = yes
accept = 127.0.0.1:3000
connect = the.real.server:443
- 鑑於上面的 stunnel 配置,我可以將我的測試客戶端配置為使用端點位址
http://localhost:3000/endpoint/url/
,並且一切正常。 - 但在生產環境中,客戶端無法直接透過網路存取真實伺服器。來自客戶端的 HTTP/S 流量必須經過代理伺服器。
- 我的問題:
- 是否可以設定 stunnel 以使用代理伺服器進行連線?
- 如果無法使用 stunnel,是否有其他方法可以實現此目的?
答案1
看起來是支持的,但是手冊頁,但是這種語言的編寫使得您或多或少必須了解協議才能理解它:
在下面協定我們可以看到以下內容:
connect 基於 RFC 2817 - 在 HTTP/1.1 中升級到 TLS,第 5.2 節 - 使用 CONNECT 請求隧道 此協定僅在客戶端模式下支援。
再往下我們發現以下:
protocolHost = ADDRESS 協定協商的主機位址 對於「連線」協定協商,protocolHost 指定代理要連線的最終 TLS 伺服器的 HOST:PORT。必須使用 connect 選項指定透過 stunnel 直接連接的代理伺服器。
因此我們可以將其拼湊起來:
[mylocalproxy]
client = yes
accept = 127.0.0.1:3000
protocol = connect
connect = proxy.example.org:3128
protocolHost = the.real.server:443
我還沒有測試過它,但根據文件的措辭,這應該可以按需要運行。
答案2
你可以這樣做:
[SSL Proxy]
accept = 8443
connect = 8084
cert = certificate.pem
key = private_key.pem
您需要來自憑證授權單位的憑證才能允許 https 用戶端連線。