2016-03-07 75 views
0

我想使用openssl s_client通過使用CONNECT請求方法通過代理(Squid)向源服務器打開TLS連接。我使用的是客戶端證書連接到代理服務器,如圖所示:openssl s_client通過代理與clientAuth的TLS連接

openssl s_client -connect my_proxy:4443 -CAfile /etc/ssl/ca/ca.crt -cert /etc/ssl/cert/client.crt -key /etc/ssl/key/client_key.pem

運行以上後,連接信息打印出罰款,然後我進入CONNECT和GET方法,這正常工作:

CONNECT www.google.com:80 HTTP/1.1 Host: www.google.com

HTTP/1.1 200連接已建立

GET /search?q=ip+address HTTP/1.1 Host: www.google.com

HTTP/1.1 200 OK

但是,我真的希望能夠建立一個TLS(HTTPS)連接,但我一直沒能得到它的工作:

CONNECT www.google.com:443 HTTP/1.1 Host: www.google.com

HTTP/1.1 200連接建立

GET /search?q=ip+address HTTP/1.1

關閉

我在做什麼錯在這裏?在你開始嘗試使用具有-proxy參數的OpenSSL 1.1.x之前,我已經嘗試過了。請注意,上述命令中的CA證書,客戶端證書和客戶端密鑰用於連接到我的代理服務器,而不是用於目標服務器(google.com),如下面的OpenSSL 1.1.0-pre3所示(如果I嘗試連接到谷歌:443)。

openssl s_client -connect google.com:80 -proxy my_proxy:4443 -CAfile /etc/ssl/ca/ca.crt -cert /etc/ssl/cert/client.crt -key /etc/ssl/key/client_key.pem

連接(00000003)

的s_client.First:HTTP連接失敗

可用

沒有客戶端證書CA名沒有同行證書發送 SSL握手已經閱讀0字節寫25字節 驗證:確定

新,(無),密碼是(NONE) 安全的重新協商不支持 壓縮:NONE 擴展:NONE 沒有ALPN協商

我可以載入我的客戶端證書,客戶端密鑰,和CA認證到Firefox(全部捆綁在一個pkcs12文件中),並且可以通過TLS連接到各種網站。這應該可以在命令行上進行。

+1

Stack Overflow是編程和開發問題的網站。這個問題似乎與題目無關,因爲它不涉及編程或開發。請參閱幫助中心的[我可以詢問哪些主題](http://stackoverflow.com/help/on-topic)。也許[超級用戶](http://superuser.com/)或[Unix&Linux堆棧交換](http://unix.stackexchange.com/)會是一個更好的地方。另請參閱[我在哪裏發佈有關Dev Ops的問題?](http://meta.stackexchange.com/q/134306)。 – jww

回答

0

注意,上述命令的CA證書,客戶端證書和客戶端密鑰是用於連接到代理服務器,而不是爲-connect服務器。」

我對此表示懷疑。據源-proxy只用來使通過代理隧道,即

  • 建立TCP連接到給定代理
  • 發送帶有從目標連接請求3210參數代理
  • 等待創建隧道時,隧道得到了確立
  • 沒有證書都參與其中,像它應該是

代理的響應這應該是可能的命令行。

這隻有在-proxy選項纔可能。 s_client版本沒有這個選項,但是不能單獨使用來通過HTTP代理建立連接,因爲沒有實現必要的功能。您可能會嘗試使用s_client以及其他將提供必要隧道的工具,如socatproxytunnel

+0

我編輯了問題以顯示'-proxy'選項的輸出。我的證書是用於連接到我的代理,而不是google.com。唯一的身份驗證proxytunnel似乎支持user:pass和NTLM。我會看看是否可以用socat完成我要做的事情。 – vic

+0

@vic:我的猜測是代理本身需要SSL(即代理設置爲「https:// my_proxy:4433」,而不是更常見的'http:// my_proxy:4433'),否則直接的's_client '代理將不會成功。但是需要SSL自己的代理不受'-proxy'參數支持,並且大多數使用HTTP代理的其他軟件都不支持它們。 –