2011-10-14 63 views
11

我在一個centos發行版上創建了我自己的git服務器。 我可以在家中通過git協議聯繫服務器。但是當我嘗試通過https訪問辦公室時,我獲得:通過https:例程git麻煩:SSL23_GET_SERVER_HELLO

Cloning into /Users/vito/Documents/... error: error:14077458:SSL routines:SSL23_GET_SERVER_HELLO:reason(1112) while accessing https://[email protected]/vitorepo.git/info/refs

fatal: HTTP request failed

問題在哪裏?在我的服務器上還是在我的辦公室mac上?

+0

您的git服務器是否可以在您的家庭子網之外實際使用?你可以說,從工作中順利通過SSH? –

+0

是的。我的服務器是一個打開所有有用端口的公共服務器。 – Vito

回答

3

看起來,這是舊版OpenSSL(0.9.8)充當客戶端和最近OpenSSL版本(1.0.0)之間的兼容性問題,充當服務器,Curl在客戶端和Apache上使用某些特定選項在服務器端。

這可能是由於OpenSSL最近的一些安全修復(可能是針對協議降級攻擊的一個)。

嘗試將客戶端上的OpenSSL庫版本升級到1.0.0。

參見:

https://sourceforge.net/tracker/?func=detail&atid=100976&aid=3395520&group_id=976

1

我相信這是一個主機名的服務器上的匹配問題。錯誤1112是SSL_R_TLSV1_UNRECOGNIZED_NAME,來自SNI名稱不匹配(info on SNI)。我有相同的issue in curl

對我來說,解決方法是確保我在客戶端上使用的名稱與服務器上的ServerName或ServerAlias配置中的一個匹配。當然,這些命令是針對apache服務器的;我不知道你需要爲git服務器做什麼。但我懷疑你在家和工作中使用的服務器名稱是不同的,家庭名稱是git服務器正在使用的名稱(因此SNI正在工作)。

'真正的'修復可能會在git中進行客戶端更改,以允許忽略名稱不匹配警告(您的瀏覽器已經這樣做)的方式。

7

當試圖連接運行openssl 1.0.0e的ubuntu實例時,我得到了與curl完全相同的響應。我通過向curl命令添加-ssl3標誌成功解決了該問題。

+0

你先生是個天才。我不得不從os x做到這一點。你能解釋爲什麼這個工作嗎? –

2

如果任何人對XMLRPC有這個問題。

Daniel的答案(強制SSL版本3)解決了我的問題。只需在clientXmlTransport_curl選項(C++)中指定XMLRPC_SSLVERSION_SSLv3即可。

問題出現在我們將服務器升級到OpenSSL版本1.0.1-4ubuntu5.5並且客戶端仍在運行0.9.8o-5ubuntu1.7時。

1

不知道我是否有完全相同的問題,但錯誤消息是相同的。它似乎只發生在我設置git服務器的ubuntu盒子上,出於某種原因,配置了git服務器的centos盒子沒有問題。

我只是在3或4天后解決它。事實證明,因爲git的底層Curl庫有一個錯誤的Keep-alive實現(我最終轉儲HTTP流量並手動驗證行爲)。

簡而言之,Curl(至少在我能找到的每個Git實現中使用的版本,包括命令行git和eclipse的EGit)似乎都不正確地解釋Connection響應頭,或者更正確地看起來不正確正確地解釋它的缺席。

要解決這個問題,你需要在apache中配置SSL虛擬主機,它爲你的GIT存儲庫提供了一個專門用於git的額外指令。在</VirtualHost >之前添加這些行。

BrowserMatch "git" nokeepalive ssl-unclean-shutdown 

您可惜不能告訴Apache剛剛降級到HTTP/1.0(將清潔劑),因爲捲曲不能處理這個問題,但你可以告訴它強制連接:關閉在每次請求其Curl知道如何處理。

在一個誤導性的巧合中,如果您嘗試直接測試Curl而沒有發生這種變化,它似乎會起作用,因爲它會發出一個請求然後中止。只有通過讓curl在ssl上對同一個保持連接執行兩個請求,這個問題纔會變得明顯。

0

我有同樣的錯誤。根本原因似乎是客戶端/服務器openssl版本不兼容。 我用apt-get upgrade openssl升級了我的服務器並升級了我的windows git安裝。

窗口的組合的Git客戶端 git version 1.9.4.msysgit.0,其中包含OpenSSL的版本: OpenSSL 0.9.8e 23 Feb 2007

和服務器使用OpenSSL版本: OpenSSL 1.0.1c 10 May 2012

似乎很好地工作在一起。