我正在Windows服务器上运行Gitblit,并且正在尝试将数据从网络上的另一台机器推送到存储库 . 我使用过SSL证书(不是自签名的,但我认为我公司签了?不确定它是如何工作的,但Chrome,IE等看到它已经过身份验证) .
运行Gitblit的服务器名为 itscm
,在开发人员的桌面上我使用此URL通过TortoiseGit推送数据:
git.exe push --progress "https://itscm:8234/git/TestRepo.git" master
但是,我收到此错误:
致命:无法访问'https:// itscm:8234 / git / TestRepo.git /':SSL证书问题:证书链中的自签名证书
当我在chrome中转到该地址时,我在页面上得到404,但我可以看到URL栏中的挂锁是绿色的 . 当我点击挂锁时,我看到身份已经过验证 . 我不明白我的浏览器如何将此证书视为有效,但当我尝试通过Git将数据推送到它时,它失败了 .
5 回答
TortoiseGit可能没有使用相同的信任库Chrome . 我认为Chrome使用系统商店,Firefox使用它自己的 . 我不知道TortoiseGit使用什么 .
在客户端,如果你设置
git config http.sslVerify false
,你可能会有更多的运气 . 你也可以set this globally .Git for Windows拥有自己的可信证书信任库,通常位于文件中
Git for Windows <= 1.9:
[Git installdir]\bin\curl-ca-bundle.crt
(例如,C:\Program Files (x86)\Git\bin\curl-ca-bundle.crt
;由[Git installdir]\etc\gitconfig
中的键http.sslCAinfo
配置) .Git for Windows> = 2.0:
[Git installdir]\mingwXX\ssl\certs\ca-bundle.crt
其中XX
代表32
或64
(例如,C:\Program Files\Git\mingw64\ssl\certs\ca-bundle.crt
;由C:\ProgramData\Git\config
中的键http.sslCAinfo
配置) .禁用证书检查(例如,通过设置
git config http.sslVerify false
)并不是一个好主意,并且可能非常危险(因为所有安全检查都被禁用,并且很容易实现MitM attacks - 具体取决于设置它适用于所有新的https连接) .为了将证书(可能是自签名的一个或另一个根证书)添加到此信任库以便自动信任它,您必须执行以下步骤:
在Internet Explorer中打开站点的URL
单击本地栏中的锁定符号,然后选择"Show certificates"(或选择站点的属性,然后单击"Certificates")
(可选)在证书链(第三个选项卡)上选择要信任的证书并将其打开
转到第二个标签"Details"
单击"Save to file",选择"Base64-encoded X.509 (.CER)"并使用唯一名称保存(请记住该名称;建议使用名称不带空格) .
现在您有几种选择
通过在cli shell中执行
git config --global http.sslCAinfo "[yourfilename]"
,仅使用此证书作为信任存储,使用单独的证书信任存储,该存储仅包含刚刚下载的证书 .通过附加系统信任库文件中的所有内容(路径见上文),然后在cli shell中执行
git config --global http.sslCAinfo "[yourfilename]"
以使用新的信托商店 .更新系统证书文件,方法是将刚刚保存的文件的内容附加到
[path-to-git-trust-store-crt-file]
(例如,通过运行管理权限的cli shell中的type [yourfilename] >> [path-to-git-trust-store-crt-file]
)或使用记事本(在桌面上制作ca-bundle.crt文件的副本,追加下载的.crt文件的内容然后将其复制回来) . 缺点:更改可能会在git update上被覆盖完成 . 现在,此证书位于Git for Windows的信任库中 .
这对我有用 . 创建一个文件夹
C:\GitCerts
. 然后将Base64 .cer
文件(按照MrTux提供的答案)下载到此C:\GitCerts
文件夹 .从命令行运行以下命令:
git config --global http.sslCAinfo "C:\GitCerts\MyCert.cer"
在记事本中打开
MyCert.cer
文件并将其保持打开状态在另一个记事本中打开Git
ca-bundle.crt
文件 . 我的位置在C:\Program Files\Git\mingw64\ssl\certs\ca-bundle.crt
.验证
MyCert.cer
文件中的证书文本是否在ca-bundle.crt
文件中(它应该是),如果不是只复制并粘贴MyCert.cer中的所有文本并将其附加到ca-bundle.crt文件的底部(确保)你把所有其他的证书信息留在那里) .-----开始证书-----
你的证书信息在这里
-----结束证书-----
如果您必须修改ca-bundle.crt文件然后保存它(您可能需要将其保存到桌面,然后将其复制并粘贴回来覆盖
ca-bundle.crt
文件)最后,根据
ca-bundle.crt
文件的路径运行以下命令命令:git config --global http.sslcainfo "C:\Program Files\Git\mingw64\ssl\certs\ca-bundle.crt"
对于那些获得自签名证书错误的 corporates 中的人 - 下面是另一种选择 .
In corporates, the same git server, that is accessible over https protocol, usually will also be accessible over ssh protocol. 因此,选择服务器URL的ssh选项并将存储库克隆为
git clone user@server/project.git
当然,您的
~\.ssh
文件夹中的公钥(id_rsa.pub
)必须添加到服务器 . 这样,您就不会将https服务器证书添加到Windows证书存储区或mac密钥链(example) .我使用GitHub遇到了这个错误,它似乎无处不在 . 我之前在GitHub上做了很多工作 .
卡巴斯基反病毒是罪魁祸首!!
当我关闭我的反病毒保护(并等待几分钟)时,我能够从我的github仓库中推/拉 .
我的最终解决方案是找到卡巴斯基的证书,然后将其添加到Git for Windows信任库 . 后面的步骤已在接受的答案中详细说明,但对于处于类似位置的其他人,我可以通过以下方式找到卡巴斯基证书:
设置>其他>网络>加密连接扫描 - 高级设置>安装证书>显示证书>详细信息>复制到文件> Base-64编码X.509(.cer)