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

Jus*_*tin 27 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
Run Code Online (Sandbox Code Playgroud)

但是,我收到此错误:

致命:无法访问' https:// itscm:8234/git/TestRepo.git / ':SSL证书问题:证书链中的自签名证书

当我在chrome中转到该地址时,我在页面上得到404,但我可以看到URL栏中的挂锁是绿色的.当我点击挂锁时,我看到身份已经过验证.我不明白我的浏览器如何将此证书视为有效,但当我尝试通过Git将数据推送到它时,它失败了.

MrT*_*Tux 31

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).
  • GIT中用于Windows> = 2.0:[Git installdir]\mingwXX\ssl\certs\ca-bundle.crt其中,XX代表3264(例如,C:\Program Files\Git\mingw64\ssl\certs\ca-bundle.crt;由键配置http.sslCAinfoC:\ProgramData\Git\config).

禁用证书检查(例如,通过设置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的信任库中.


小智 23

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

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

  • ***禁用SSL验证非常危险.***SSL证书验证的重点是保护您的代码在通过HTTPS传输时不被篡改.禁用它意味着恶意用户可以在推送和获取代码时将漏洞和其他令人讨厌的东西插入到代码中.除非你确定中间人攻击不是你的问题,否则不推荐. (9认同)
  • 不建议.但这是如何全局设置:`git config --global http.sslVerify false` (2认同)

dan*_*iel 5

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

  • 从命令行运行以下命令:git config --global http.sslCAinfo "C:\GitCerts\MyCert.cer"
  • 在记事本中打开MyCert.cer文件并保持打开状态
  • 在另一个记事本中打开 Gitca-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"