替换GitBlit的证书为域证书
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