首页 文章

无法使用带有自签名证书的Windows上的git解析“无法获取本地颁发者证书”

提问于
浏览
188

我在Windows上使用git . 我安装了msysgit包 . 我的测试存储库在服务器上有自签名证书 . 我可以使用http访问和使用存储库而不会出现问题 . 移至https会出现错误“SSL证书问题:无法获取本地颁发者证书” .

我在Windows 7客户端计算机的受信任的根证书颁发机构中安装了自签名证书 . 我可以浏览到Internet Explorer中的https存储库URL,没有错误消息 .

这篇博客http://blogs.msdn.com/b/phkelley/archive/2014/01/20/adding-a-corporate-or-self-signed-certificate-authority-to-git-exe-s-store.aspx解释说curl不会使用客户机's certificate store. I followed the blog post'的建议来创建curl-ca-bundle.crt的私有副本并配置git来使用它 . 我确定git正在使用我的副本 . 如果我重命名副本; git抱怨文件丢失了 .

我粘贴在我的证书中,如博客文章中所述,我仍然收到“无法获得本地颁发者证书”的消息 .

我通过https克隆了一个GitHub存储库,验证了git仍在工作 .

我唯一看到的与博客文章不同的是我的证书是根证书 - 没有链条可以达到它 . 我的证书最初来自单击IIS8 IIS管理器链接“创建自签名证书” . 也许这使得证书在某种程度上与curl期望的不同 .

如何让git / curl接受自签名证书?

12 回答

  • 39

    如果要完全禁用SSL验证,请打开Git Bash并运行该命令 .

    git config --global http.sslVerify false
    

    Note: This solution may open you to attacks like man-in-the-middle attacks . 因此,请尽快再次启用验证:

    git config --global http.sslVerify true
    
  • 1

    我也有这个问题 . 在我的情况下,我试图获得一个post-receive Git挂钩,以便在每次推送时更新服务器上的工作副本 . 试图按照您链接到的博客中的说明进行操作 . 对我来说也没有用,并且基于每个用户覆盖设置似乎也没有用 .

    我最终要做的是为Git整体禁用SSL验证(如文章所述) . 不是完美的解决方案,但它会起作用,直到我能找到更好的解决方案 .

    我编辑了Git配置文本文件(带有我最喜欢的行结束中性应用程序,如记事本),位于:

    C:\ Program Files(x86)\ Git \ etc \ gitconfig

    在[http]块中,我添加了一个禁用sslVerify的选项 . 我完成时看起来像这样:

    [http]
        sslVerify = false
        sslCAinfo = /bin/curl-ca-bundle.crt
    

    这就是诀窍 .

    NOTE: 这会禁用SSL验证,不建议将其作为长期解决方案 .

  • 4

    kiddailey 我认为非常接近,但我不会禁用ssl验证,而只是提供本地证书:

    在Git配置文件中

    [http]
        sslCAinfo = /bin/curl-ca-bundle.crt
    

    或者通过命令行:

    git config --global http.sslCAinfo /bin/curl-ca-bundle.crt
    
  • 40

    这个问题的答案Using makecert for Development SSL为我解决了这个问题 .

    我不知道为什么,但是IIS Manager中简单的“创建自签名证书”链接创建的证书不起作用 . 我在创建和安装自签名CA Root的链接问题中遵循了该方法;然后使用它为我的服务器颁发服务器身份验证证书 . 我在IIS中安装了它们 .

    这使我的情况与原始问题中引用的博客文章相同 . 将根证书复制/粘贴到curl-ca-bundle.crt后,git / curl组合就会得到满足 .

  • 166

    我也遇到过这个问题 . 最后通过this MSDN Blog的指导得到了解决 .

    Update

    实际上你需要在git的证书文件curl-ca-bundel.cert中添加证书,该文件位于Git \ bin目录中 .

    Steps

    • 在浏览器中打开github页面,然后单击地址栏中的锁定图标 .

    • 在打开的小弹出窗口中导航到'view certificate'链接,它将打开一个弹出窗口 .

    • 导航到证书选项卡(在我的情况下为第3个) . 选择作为根证书的顶级节点 . 并按下底部的复制证书按钮并保存文件 .

    • 在文件浏览器中导航Git \ bin目录并在文本编辑器中打开curl-ca-bundle.crt .

    • 也在文本编辑器中打开导出的证书文件(在步骤3中) .

    • 将导出证书中的所有内容复制到curl-ca-bundle.crt的末尾,然后保存 .

    最后检查状态 . Please note that backup curl-ca-bundle.crt file before editing to remain on safe side.

  • 6

    为了避免完全禁用ssl验证或复制/黑客攻击git使用的捆绑CA证书文件,你可以导出 the host's certificate chain into a file ,并让git使用它:

    git config --global http.https://the.host.com/.sslCAInfo c:/users/me/the.host.com.cer
    

    如果这不起作用,您可以为主机禁用ssl验证 only

    git config --global http.https://the.host.com/.sslVerify false
    

    注意:当ssl验证关闭时,在中间攻击中可能受到攻击 .

  • 35

    我刚刚遇到了同样的问题,但在Windows上使用sourcetree同样适用于Windows上的普通GIT . 按照以下步骤,我能够解决此问题 .

    • 获取服务器证书树可以使用chrome完成 . 导航为服务器地址 . 单击挂锁图标并查看证书 . 将所有证书链导出为base64编码文件(PEM)格式 .

    • 将证书添加到GIT信任配置文件的信任链中运行"git config --list" . 找到"http.sslcainfo"配置,它显示证书信任文件所在的位置 . 将所有证书复制到信任链文件中,包括"- -BEGIN- -"和"- -END- -" .

    • 确保将整个证书链添加到证书文件中

    这应该可以解决您使用自签名证书和使用GIT的问题 .

    我尝试使用“http.sslcapath”配置,但这不起作用 . 此外,如果我没有在证书文件中包含整个链,那么这也将失败 . 如果有人对此有指示,请告诉我,因为必须重复上述新安装 .

    如果这是系统GIT,那么您可以使用TOOLS - > options GIt选项卡中的选项来使用系统GIT,这样就可以解决sourcetree中的问题 .

  • 16

    问题是git默认使用“Linux”加密后端 .

    从Git for Windows 2.14开始,您现在可以将Git配置为使用SChannel,内置Windows网络层作为加密后端 . 这意味着您将使用Windows证书存储机制,而无需显式配置curl CA存储机制:https://msdn.microsoft.com/en-us/library/windows/desktop/aa380123(v=vs.85).aspx

    只需执行:

    git config --global http.sslbackend schannel
    

    这应该有帮助 .

    在安装git for windows时,使用schannel现在是标准设置,如果可能的话,建议不要通过SSH检查存储库:由于https更易于配置且不太可能被防火墙阻止,因此意味着失败的可能性更小 .

  • -5

    如果是 github Repositories (or any none-self-signed certs) ,在安装Git-on-windows时选择下面的内容,解决了这个问题 .

    enter image description here

  • 3

    我之前遇到过这个问题,并使用以下配置解决它 .

    [http "https://your.domain"] sslCAInfo=/path/to/your/domain/priviate-certificate

    从git 2.3.1开始,您可以在http之后放置 https://your.domain 以指示以下证书仅适用于它 .

  • 17

    然后尝试类似的事情: git clone https://github.com/heroku/node-js-getting-started.git

  • 87

    之前使用此命令运行composer update / install:

    git config --global http.sslverify false
    

相关问题