31

我在 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 将数据推送到它时,它失败了。

4

10 回答 10

46

Git for Windows 有自己的受信任证书的信任库,通常位于文件中

  • 适用于 Windows <=1.9 的 Git:([Git installdir]\bin\curl-ca-bundle.crt例如,C:\Program Files (x86)\Git\bin\curl-ca-bundle.crt; 由http.sslCAinfoin 中的键配置[Git installdir]\etc\gitconfig)。
  • 适用于 Windows >= 2.0 的 Git:[Git installdir]\mingwXX\ssl\certs\ca-bundle.crt其中XX代表3264(例如,由git config 中C:\Program Files\Git\mingw64\ssl\certs\ca-bundle.crt的键配置,例如或您的全局/本地配置)。http.sslCAinfoC:\Program Files\Git\etc

禁用证书检查(例如,通过设置git config http.sslVerify false)不是一个好主意,并且可能非常危险(因为所有安全检查都被禁用并且很容易发生中间人攻击- 取决于设置的位置,它适用于所有新的 https 连接)。

为了将证书(可能是自签名的一个或另一个根证书)添加到此信任库以自动信任它,您必须执行以下步骤(前五个步骤只是收集证书,这也可以使用您喜欢的浏览器完成,但可能需要不同的任务):

  1. 在 Microsoft Edge 中打开网站的 URL

  2. 单击本地栏中的锁定符号并选择“连接安全”,然后单击证书符号。

  3. (可选)在证书链(第三个选项卡)上选择您要信任的证书并打开它

  4. 转到第二个选项卡“详细信息”

  5. 单击“保存到文件”,选择“Base64 编码的 X.509 (.CER)”并使用唯一名称保存(记住该名称;建议使用不带空格的名称)。

  6. 现在你有几个选择

    1. 通过在 cli shell 中执行,使用仅包含您刚刚下载的证书的单独证书信任库,git config --global http.sslCAinfo "[yourfilename]"以便仅将此证书用作信任库。
    2. 使用单独的证书信任库,其中包含您刚刚下载的证书和 git 信任库中的所有证书,方法是附加系统信任库文件中的所有内容(路径见上文),然后git config --global http.sslCAinfo "[yourfilename]"在 cli shell 中执行以使用此新信任店铺。
    3. 更新系统证书文件,通过将刚刚保存的文件的内容附加到[path-to-git-trust-store-crt-file](例如,通过type [yourfilename] >> [path-to-git-trust-store-crt-file]在以管理权限运行的 cli shell 中)或使用记事本(在桌面上复制 ca-bundle.crt 文件,附加内容下载的 .crt 文件,然后将其复制回来)。缺点:更改可能会在 git update 上被覆盖

完毕。现在,此证书位于 Git for Windows 的信任库中。


最新版本的 Windows 版 Git 也可以使用 Windows 证书存储,这在企业环境中可能更方便。这可以在安装时进行配置。

于 2014-09-30T19:33:49.800 回答
25

TortoiseGit 可能没有使用相同的信任库 Chrome。我认为 Chrome 使用系统商店,Firefox 使用它自己的。我不知道 TortoiseGit 使用什么。

在客户端,如果你设置git config http.sslVerify false你可能会有更多的运气。您也可以全局设置

于 2013-10-16T21:28:12.097 回答
5

这对我有用。创建一个文件夹C:\GitCerts。然后将Base64 .cer文件(按照MrTux提供的答案)下载到此C:\GitCerts文件夹。

  • 从命令行运行以下命令:git config --global http.sslCAinfo "C:\GitCerts\MyCert.cer"
  • MyCert.cer在记事本中打开文件并保持打开状态
  • ca-bundle.crt在另一个记事本中打开 Git文件。我的位置C:\Program Files\Git\mingw64\ssl\certs\ca-bundle.crt
  • 验证文件中的证书文本MyCert.cer是否在ca-bundle.crt文件中(应该是),如果不只是复制并粘贴 MyCert.cer 中的所有文本并将其附加到 ca-bundle.crt 文件的底部(确保您保留所有那里的其他证书信息)。

-----开始证书-----

你的证书信息在这里

-----结束证书-----

  • If you had to modify the ca-bundle.crt file then save it (you may have to save it to your Desktop and then copy and paste it back in to overwrite the ca-bundle.crt file)
  • Finally, based on the path of your ca-bundle.crt file run the following command: git config --global http.sslcainfo "C:\Program Files\Git\mingw64\ssl\certs\ca-bundle.crt"
于 2016-04-07T20:41:21.740 回答
2

I experienced this error using GitHub and it seemingly came out of nowhere. I had done plenty of work on GitHub before.

Kaspersky anti-virus was the culprit!!

When I turned off my anti-virus protection (and waited a couple of minutes) I was able to push / pull from my github repo.

My final solution was to locate a certificate from Kaspersky then add it to the Git for Windows trust store. The latter step is already detailed in the accepted answer, but for anyone else in a similar position I was able to locate the Kaspersky certificate by going to:

Settings > Additional > Network > Encrypted connections scanning - Advanced Settings > Install Certificate > Show Certificate > Details > Copy to File > Base-64 encoded X.509 (.cer)

于 2018-09-29T19:30:00.087 回答
1

对于那些在企业中遇到自签名证书错误的人 - 下面是另一种选择。

在企业中,可以通过 https 协议访问的同一 git 服务器通常也可以通过 ssh 协议访问。所以选择服务器 url 的 ssh 选项并将存储库克隆为

git clone user@server/project.git

当然,id_rsa.pub您文件夹中的公钥()~\.ssh必须添加到服务器。这样您就无需将 https 服务器证书添加到您的 Windows 证书存储或 mac 钥匙串(示例)。

于 2014-12-27T12:11:14.500 回答
0

I found one more answer for this issue :

$ git config http.sslVerify false
于 2019-01-30T08:02:48.893 回答
0

I had the same problem because my laptop died and the clock reset to its default settings. If that's the case for you, set your clock to the current date and time and the problem should be fixed.

If your clock is set properly, follow what other people are recommending.

于 2020-09-09T02:37:35.807 回答
0

I've had a similar problem, the error was "certificate has expired". After realizing that git uses own CA store I just updated Git and problem gone. P.S. BTW, recent Git for Windows can use Windows certificate store which can be more convenient in a corporate environment.

于 2020-12-09T15:22:30.543 回答
0

If it's working previously and suddenly it stopped working with an SSL error then try to restart your system once. This way it worked for me

于 2020-12-29T11:20:29.503 回答
0

I got the same error as I'm connecting through an insecure network. Switching the network resolved my issue.

于 2021-02-20T06:54:37.167 回答