首页 文章

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

提问于
浏览
25

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

5 回答

  • 0

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

    在客户端,如果你设置 git config http.sslVerify false ,你可能会有更多的运气 . 你也可以set this globally .

  • 3

    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 ;由 [Git installdir]\etc\gitconfig 中的键 http.sslCAinfo 配置) .

    • 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 ;由 C:\ProgramData\Git\config 中的键 http.sslCAinfo 配置) .

    禁用证书检查(例如,通过设置 git config http.sslVerify false )并不是一个好主意,并且可能非常危险(因为所有安全检查都被禁用,并且很容易实现MitM attacks - 具体取决于设置它适用于所有新的https连接) .

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

    • 在Internet Explorer中打开站点的URL

    • 单击本地栏中的锁定符号,然后选择"Show certificates"(或选择站点的属性,然后单击"Certificates")

    • (可选)在证书链(第三个选项卡)上选择要信任的证书并将其打开

    • 转到第二个标签"Details"

    • 单击"Save to file",选择"Base64-encoded X.509 (.CER)"并使用唯一名称保存(请记住该名称;建议使用名称不带空格) .

    • 现在您有几种选择

    • 通过在cli shell中执行 git config --global http.sslCAinfo "[yourfilename]" ,仅使用此证书作为信任存储,使用单独的证书信任存储,该存储仅包含刚刚下载的证书 .

    • 通过附加系统信任库文件中的所有内容(路径见上文),然后在cli shell中执行 git config --global http.sslCAinfo "[yourfilename]" 以使用新的信托商店 .

    • 更新系统证书文件,方法是将刚刚保存的文件的内容附加到 [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的信任库中 .

  • 0

    这对我有用 . 创建一个文件夹 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文件的底部(确保)你把所有其他的证书信息留在那里) .

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

    你的证书信息在这里

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

    • 如果您必须修改ca-bundle.crt文件然后保存它(您可能需要将其保存到桌面,然后将其复制并粘贴回来覆盖 ca-bundle.crt 文件)

    • 最后,根据 ca-bundle.crt 文件的路径运行以下命令命令: git config --global http.sslcainfo "C:\Program Files\Git\mingw64\ssl\certs\ca-bundle.crt"

  • 27

    对于那些获得自签名证书错误的 corporates 中的人 - 下面是另一种选择 .

    In corporates, the same git server, that is accessible over https protocol, usually will also be accessible over ssh protocol. 因此,选择服务器URL的ssh选项并将存储库克隆为

    git clone user@server/project.git

    当然,您的 ~\.ssh 文件夹中的公钥( id_rsa.pub )必须添加到服务器 . 这样,您就不会将https服务器证书添加到Windows证书存储区或mac密钥链(example) .

  • 21

    我使用GitHub遇到了这个错误,它似乎无处不在 . 我之前在GitHub上做了很多工作 .

    卡巴斯基反病毒是罪魁祸首!!

    当我关闭我的反病毒保护(并等待几分钟)时,我能够从我的github仓库中推/拉 .

    我的最终解决方案是找到卡巴斯基的证书,然后将其添加到Git for Windows信任库 . 后面的步骤已在接受的答案中详细说明,但对于处于类似位置的其他人,我可以通过以下方式找到卡巴斯基证书:

    设置>其他>网络>加密连接扫描 - 高级设置>安装证书>显示证书>详细信息>复制到文件> Base-64编码X.509(.cer)

相关问题