Subversion SSL 握手失敗和 408 錯誤程式碼
版本
顛覆:版本 1.6.11 (r934486)
作業系統:CentOS 6.8 版(最終版)
背景
我有各種在 CentOS 機器上作為 cronjobs 執行的 shell 腳本。shell 腳本將文件送出到 Subversion 並從 Subversion 簽出文件。今天我所有的腳本都開始失敗並出現以下錯誤
svn:‘https://svn.int.mydomain.edu/eas'的選項:SSL握手失敗:收到SSL警報:協議版本錯誤(https://svn.int.mydomain.edu)
作為故障排除步驟,我執行了以下命令
openssl s_client -connect svn.int.mydomain.edu:443
並收到以下輸出(略有編輯)
CONNECTED(00000003) --- Certificate chain 0 s:/OU=Domain Control Validated/CN=*.int.mydomain.edu i:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2 1 s:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2 i:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./CN=Go Daddy Root Certificate Authority - G2 2 s:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./CN=Go Daddy Root Certificate Authority - G2 i:/C=US/O=The Go Daddy Group, Inc./OU=Go Daddy Class 2 Certification Authority 3 s:/C=US/O=The Go Daddy Group, Inc./OU=Go Daddy Class 2 Certification Authority i:/C=US/O=The Go Daddy Group, Inc./OU=Go Daddy Class 2 Certification Authority --- Server certificate -----BEGIN CERTIFICATE----- REDACTED -----END CERTIFICATE----- subject=/OU=Domain Control Validated/CN=*.int.mydomain.edu issuer=/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2 --- No client certificate CA names sent Server Temp Key: ECDH, prime256v1, 256 bits --- SSL handshake has read 5545 bytes and written 373 bytes --- New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384 Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE SSL-Session: Protocol : TLSv1.2 Cipher : ECDHE-RSA-AES256-GCM-SHA384 Session-ID: REDACTED Session-ID-ctx: Master-Key: REDACTED Key-Arg : None Krb5 Principal: None PSK identity: None PSK identity hint: None Start Time: 1618275549 Timeout : 300 (sec) Verify return code: 0 (ok) --- HTTP/1.1 408 Request Time-out content-length: 110 cache-control: no-cache content-type: text/html connection: close <html><body><h1>408 Request Time-out</h1> Your browser didn't send a complete request in time. </body></html> closed
正如你所看到的,我
HTTP/1.1 408 Request Time-out
在標準輸出的末尾得到了一個。我可以驗證我可以在這個盒子上訪問https://svn.int.mydomain.edu,因為從那個盒子單獨安裝 svn 可以正常工作(隨 Jenkins 外掛一起安裝的 SVN 安裝)。問題
有人對這裡的其他故障排除技術有任何想法嗎?我試圖搜尋這個問題,但沒有卓有成效的回應。
408 響應僅僅是因為 openssl 從未發送過 HTTP 請求。它完成了 TCP 連接和 SSL 握手,僅此而已。
響應的重要部分是:
Protocol : TLSv1.2 Cipher : ECDHE-RSA-AES256-GCM-SHA384 Verify return code: 0 (ok)
這
0 (ok)
部分意味著就openssl而言,SSL連接很好。證書有效且至少支持一種密碼和協議。但是來自 bash 腳本的錯誤消息表明 SSL 連接不正常。我最好的猜測是伺服器已經升級,現在不再支持 TLS 1.0 和 TLS 1.1,而且你的 bash 腳本用於 HTTPS 請求的任何內容都不支持 TLS 1.2。您可以通過將
-tls1
選項添加到您的 openssl 命令來執行測試。如果這導致其他問題,
0 (ok)
那麼這個 TLS 版本不兼容很可能是問題所在。問題也可能是可用密碼不匹配。如果您仍然獲得
0 (ok)
TLS 1.0,那麼可能值得研究一下伺服器和客戶端上可用的密碼。還可能值得查看對伺服器所做的最後更改或只是嘗試升級客戶端。(這是在黑暗中拍攝,但有時這些工作……)