Ssl

Subversion SSL 握手失敗和 408 錯誤程式碼

  • April 13, 2021

版本

顛覆:版本 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,那麼可能值得研究一下伺服器和客戶端上可用的密碼。

還可能值得查看對伺服器所做的最後更改或只是嘗試升級客戶端。(這是在黑暗中拍攝,但有時這些工作……)

引用自:https://serverfault.com/questions/1060194