我正在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将数据推送到该证书时,它会失败。
答案 0 :(得分:30)
Git for Windows拥有自己的可信证书信任库,通常位于文件
中[Git installdir]\bin\curl-ca-bundle.crt
(例如C:\Program Files (x86)\Git\bin\curl-ca-bundle.crt
;由http.sslCAinfo
中的密钥[Git installdir]\etc\gitconfig
配置。[Git installdir]\mingwXX\ssl\certs\ca-bundle.crt
其中XX
代表32
或64
(例如C:\Program Files\Git\mingw64\ssl\certs\ca-bundle.crt
;由键{http.sslCAinfo
配置1}}在C:\ProgramData\Git\config
)。禁用证书检查(例如,通过设置git config http.sslVerify false
)不是一个好主意,可能非常危险(因为所有安全检查都被禁用,MitM attacks很容易实现 - 取决于设置的位置它适用于所有新的https连接。)
为了将证书(可能是自签名的一个或另一个根证书)添加到此信任库以便自动信任它,您必须执行以下步骤:
现在你有几个选择
git config --global http.sslCAinfo "[yourfilename]"
,以便仅将此证书用作信任存储区。git config --global http.sslCAinfo "[yourfilename]"
shell以便使用这个新的信任存储。[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的信任存储区中。
答案 1 :(得分:22)
TortoiseGit可能没有使用相同的信任库Chrome。我认为Chrome使用系统商店,Firefox使用它自己的。我不知道TortoiseGit使用的是什么。
在客户端上,如果设置git config http.sslVerify false
,您可能会有更多运气。您还可以set this globally。
答案 2 :(得分:3)
这对我有用。创建文件夹C:\GitCerts
。然后将Base64 .cer
文件(按照MrTux提供的答案)下载到此C:\GitCerts
文件夹。
git config --global http.sslCAinfo "C:\GitCerts\MyCert.cer"
MyCert.cer
文件并将其保持打开状态ca-bundle.crt
文件。我的位置在C:\Program Files\Git\mingw64\ssl\certs\ca-bundle.crt
。MyCert.cer
文件中的证书文本是否在ca-bundle.crt
文件中(它应该是),如果不是只复制并粘贴MyCert.cer中的所有文本并将其附加在底部ca-bundle.crt文件(确保将所有其他证书信息保留在那里)。----- BEGIN CERTIFICATE -----
您的证书信息
----- END CERTIFICATE -----
ca-bundle.crt
文件)ca-bundle.crt
文件的路径运行以下命令:git config --global http.sslcainfo "C:\Program Files\Git\mingw64\ssl\certs\ca-bundle.crt"
答案 3 :(得分:0)
对于那些 corporates ,谁获得自签名证书错误 - 下面是另一种选择。
在企业中,同样的git服务器,可通过https协议访问,通常也可通过ssh协议访问。因此,请选择服务器URL的ssh选项和将存储库克隆为
git clone user@server/project.git
当然,您的id_rsa.pub
文件夹中的公钥(~\.ssh
)必须添加到服务器中。这样,您就不会将https服务器证书添加到Windows证书存储区或mac密钥链(example)。
答案 4 :(得分:0)
我在使用GitHub时遇到了此错误,而且它似乎无处不在。我以前在GitHub上做过很多工作。
卡巴斯基反病毒软件是罪魁祸首!
当我关闭防病毒保护功能(并等待了几分钟)后,我便能够从github存储库中进行推送/提取操作。
我的最终解决方案是从卡巴斯基找到一个证书,然后将其添加到Windows信任库的Git中。接受的答案中已经详细介绍了后面的步骤,但是对于其他处于相似位置的人,我可以通过以下方式找到卡巴斯基证书:
设置>其他>网络>加密连接扫描-高级设置>安装证书>显示证书>详细信息>复制到文件> Base-64编码的X.509(.cer)
答案 5 :(得分:0)
我遇到了同样的问题,因为我的笔记本电脑死了并且时钟重置为默认设置。如果是这种情况,请将您的时钟设置为当前日期和时间,问题应该会得到解决。
如果您的时钟设置正确,请遵循其他人的建议。
答案 6 :(得分:0)
我遇到了类似的问题,错误是“证书已过期”。在意识到git使用自己的CA存储之后,我刚刚更新了Git,问题就消失了。 附言顺便说一句,最近用于Windows的Git可以使用Windows证书存储,这在公司环境中会更加方便。
答案 7 :(得分:0)
如果它之前可以正常工作,但突然停止工作并出现 SSL 错误,请尝试重新启动系统一次。这种方式对我有用
答案 8 :(得分:0)
我在通过不安全的网络连接时遇到了同样的错误。切换网络解决了我的问题。
答案 9 :(得分:-1)
我为此问题找到了另一个答案:
$ git config http.sslVerify false