Warm tip: This article is reproduced from serverfault.com, please click

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

(其他 - Invalid SSL certificate when pushing to Git server)

发布于 2013-10-16 20:46:34

我在Windows Server上运行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将数据推送到该证书时,它失败了。

Questioner
Justin
Viewed
11
MrTux 2020-01-18 00:01:49

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

  • GIT中的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)。
  • Windows的Git> = 2.0:[Git installdir]\mingwXX\ssl\certs\ca-bundle.crt其中XX代表3264(例如,C:\Program Files\Git\mingw64\ssl\certs\ca-bundle.crt;由http.sslCAinfogit config中的键配置,例如C:\ProgramData\Git\configC:\Program Files\Git\etc或你的全局/本地配置)。

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

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

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

    1. 通过git config --global http.sslCAinfo "[yourfilename]"在cli shell中执行,使用仅包含你刚下载的证书的单独的证书信任库,以便仅将此证书用作信任库。
    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的信任存储中。