GitBlit(當前版本1.6.2,http://gitblit.org/) 是一個Git版本控制的服務端,使用java編寫,功能上足夠滿足基本的版本控制要求,而且部署很簡單方便,比如windows上可以使用Gitblit GO,解壓縮后運行gitblit.cmd就可以使用。GitBlit支持HTTPS和SSH讀寫,Visual studio 2013自帶Git客戶端的支持,但是不能使用SSH,使用HTTPS時又要求SSL證書必須是可信的,在域環境下可以使用域CA頒發的服務器證書,這就需要使用域證書來替換GitBlit自頒發的證書。
可以直接使用頒發給IIS服務的域證書,首先需要將IIS證書導出,一定要同時導出私鑰:
比如這里的服務器名為TFS,保存導出的證書為tfs.pfx。
修改GitBlit配置文件gitblit.properties的server.storePassword,比如這里簡單的設置為:
server.storePassword = 123
刪除GitBlit目錄下這些文件(其實並不是必須的,只是演示如何從頭初始化這些文件):
data\serverKeyStore.jks
data\serverTrustStore.jks
data\ssh-dsa-hostkey.pem
data\ssh-rsa-hostkey.pem
data\certs\ca.cer
data\certs\caKeyStore.p12
data\certs\caRevocationList.crl
運行authority.cmd,會提示輸入“證書默認設置”,確定后提示輸入keystore密碼,輸入前面的“123”,程序會創建serverKeyStore.jks、serverTrustStore.jks等文件,使用工具欄上的“創建服務器SSL證書”按鈕創建證書:
這時輸入服務器的主機名稱,同時選中“使用此證書提供https支持”,確定完成后關閉Certificate authority。
使用Portecle工具來修改證書Keystore,可以從http://portecle.sourceforge.net下載,使用Portecle打開tfs.pfx,選擇密鑰對后導出:
導出的文件命名為TFS_CA.p12,接着使用Portecle打開serverKeyStore.jks,導入保存在TFS_CA.p12中的密鑰對:
導入時需要輸入密鑰對的Alias,輸入tfs,會提示是否覆蓋原有的tfs記錄,選擇“是”,再次提示輸入密鑰對記錄的密碼,同樣輸入“123”(必須和keystore的密碼相同),保存后關閉Portecle。
最后還需要修改gitblit.properties的server.certificateAlias,程序以及設置為TFS,但是測試發現必須為小寫:
server.certificateAlias = tfs
注意gitblit.properties文件末尾(authority.cmd添加的)可能有重復的server.certificateAlias設置,一定要刪除。
運行gitblit.cmd啟動gitblit,啟動過程中會自動生成ssh-dsa-hostkey.pem和ssh-rsa-hostkey.pem,默認https端口8443,檢查證書成功替換為域證書。
在使用git命令clone通過https訪問時仍然可能會報錯“Unable to clone Git repository due to self signed certificate”,需要禁止客戶端的SSL驗證:
git config --global http.sslVerify false