我正在嘗試設定 SSL 連接隧道。某種 SSL 代理。
最終目標
僅連接http客戶僅限 https伺服器。
我的計劃是
- 客戶端:將端點更改為代理人
- PROXY:使用stunnel接收來自CLIENT的請求並將其轉發到SERVER
stunnel.conf
cert = /etc/stunnel/stunnel.pem
foreground = yes
chroot = /var/run/stunnel
setuid = stunnel
setgid = stunnel
pid = /stunnel.pid
debug = 7
[my_route]
accept = 7121
connect = SERVER:443
;connect = SERVER:443/somedata
測試1
$openssl s_client -connect SERVER:443
New, TLSv1/SSLv3, Server public key is 2048 bit
測試2
openssl s_client -connect PROXY:7121
New, TLSv1/SSLv3, Server public key is 2048 bit
結果(透過代理從客戶端連接到伺服器)。
Service [my_route] accepted (FD=3) from 10.0.2.2:12345
Service [my_route] started
Service [my_route] accepted connection from 10.0.2.2:12345
SSL state (accept): before/accept initialization
SSL_accept: 1408F10B: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
Connection reset: 0 byte(s) sent to SSL, 0 byte(s) sent to socket
Local socket (FD=3) closed
Service [my_route] finished (0 left)
問題
為什麼IP與SERVER不符?為什麼連接到10.0.2.2?
這是否意味著我連接到了錯誤的伺服器?怎麼會這樣呢?這個錯誤說明了什麼?該遠端伺服器使用另一個版本的 SSL,不是嗎?
答案1
- 為什麼IP與SERVER不符?為什麼連接到10.0.2.2?
因為該 IP 位址不是本機的位址伺服器它正在連接到,但地址客戶它正在接收的機器(執行 openssl s_client)。
這是否意味著我連接到了錯誤的伺服器?怎麼會這樣呢?
不,這與伺服器無關。
- 這個錯誤說明了什麼?該遠端伺服器使用另一個版本的 SSL,不是嗎?
這表示您的 stunnel 嘗試與客戶端 (openssl s_client) 連線使用 SSL。他們似乎不同意使用 SSL 協議版本。
然而,這是完全錯誤的。在您要設定的設定中,stunnel 應等待 HTTP 連接,並將這些連接透過 HTTPS 隧道傳輸到 SERVER。因此,您不能使用 openssl s_client 連線到 stunnel,因為 openssl s_client 將使用 SSL,而 stunnel 將等待非 SSL 連線。
為了解決這個問題,您需要client = yes
在配置中增加一行。然後,您不應使用 openssl s_client 作為 stunnel 的客戶端,而應使用 telnet ( telnet server2 7121
) 或能夠與伺服器進行 HTTP 通訊的程序(例如 Web 瀏覽器或類似的程序,其 URL 開頭為http://PROXY:7121/...
)。
另外,強烈建議在設定檔中使用 IP 位址(而不是文字主機名稱)。
像這樣的東西應該適合你:
[my_route]
client = yes
accept = 7121
connect = aaa.bbb.ccc.ddd:443
答案2
似乎這個問題已經解決在這個關於伺服器故障的答案中;粗體部分似乎適合您的場景:
伺服器
stunnel
有options = NO_SSLv3
,但客戶端正在嘗試使用 SSLv3 進行連線。您需要升級用戶端以支援較新版本的 SSL,或需要變更 stunnel 配置以接受 SSLv3。
答案3
將其添加到設定檔中即可。
sslversion = all
你可能還錯過了另一件事。您應該明確設定“client = yes”,否則預設為“no”。