推送到Git服务器时无效的SSL证书

时间:2013-10-16 20:46:34

标签: git ssl credentials tortoisegit gitblit

我正在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将数据推送到该证书时,它会失败。

10 个答案:

答案 0 :(得分:30)

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;由http.sslCAinfo中的密钥[Git installdir]\etc\gitconfig配置。
  • Git for Windows> = 2.0:[Git installdir]\mingwXX\ssl\certs\ca-bundle.crt其中XX代表3264(例如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连接。)

为了将证书(可能是自签名的一个或另一个根证书)添加到此信任库以便自动信任它,您必须执行以下步骤:

  1. 在Internet Explorer中打开网站的网址
  2. 单击本地栏中的锁定符号,然后选择“显示证书”(或选择站点的属性并单击“证书”)
  3. (可选)在证书链上选择要信任的证书(第三个选项卡)并将其打开
  4. 转到第二个标签“详细信息”
  5. 点击“保存到文件”,选择“Base64编码的X.509(.CER)”并使用唯一名称保存(请记住该名称;建议使用名称不带空格。)
  6. 现在你有几个选择

    1. 使用单独的证书信任存储区,该存储区仅包含刚刚下载的证书,方法是在cli shell中执行git config --global http.sslCAinfo "[yourfilename]",以便仅将此证书用作信任存储区。
    2. 使用单独的证书信任存储区,其中包含刚下载的证书和git信任存储区中的所有证书,方法是附加系统信任存储文件中的所有内容(路径见上文),然后在cli中执行git config --global http.sslCAinfo "[yourfilename]" shell以便使用这个新的信任存储。
    3. 更新系统证书文件,方法是将刚刚保存的文件的内容附加到[path-to-git-trust-store-crt-file](例如,通过运行管理权限的cli shell中的type [yourfilename] >> [path-to-git-trust-store-crt-file])或使用记事本(制作副本桌面上的ca-bundle.crt文件,附加下载的.crt文件的内容,然后将其复制回来)。缺点:更改可能会被git update覆盖
  7. 完成。现在,此证书位于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文件并将其保持打开状态
  • 在另一个记事本中打开Git 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文件)
  • 最后,根据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