SSL 证书问题:证书链中的自签名证书

use*_*934 9 git github intellij-idea

我最近升级了我的 Inteliij IDEA 2019.2,如果我尝试从我的 IDE 中拉出 Git Pull 失败:无法访问 ' https://github.xxx.com/app-Hello-USD/DGS.git,我会遇到以下错误/ ': SSL 证书问题:证书链中的自签名证书。

有人可以帮助我我必须启用什么选项。

谢谢

小智 63

我们可以使用Windows证书存储机制。

请尝试这个

git config --global http.sslbackend schannel
Run Code Online (Sandbox Code Playgroud)

  • 我发表评论是为了让更多人关注这个答案。对于 Windows,这是最好的答案。特别是如果您使用的是公司拥有和管理的计算机。当公司将更新推送到 CA 时,如果您使用 schannel,它不会破坏您的环境。在解压和重新封装 ssl 流量的公司工作的人都知道我的意思。 (7认同)
  • 这可能是最好的答案。这样我们就可以使用 Windows 的本机工具导入证书,而不会破坏基本功能。 (6认同)
  • 为什么这有效? (3认同)
  • Windows 的最佳答案。谢谢。 (2认同)

Boš*_*zik 37

当您的 Git 存储库服务器托管在专用网络内并使用本地生成的(自签名)TLS 证书时,通常会发生这种情况。由于该证书不是来自“可信”来源,因此大多数软件都会抱怨连接不安全。

有两种方法可以解决这个问题。首先是禁用 SSL 验证,以便您可以克隆存储库。其次是将自签名证书添加到 Git 作为可信证书。

禁用 SSL 验证

最快、最简单的方法是在 Git 上全局禁用 SSL 验证来克隆存储库。但克隆后,您将立即再次启用它,否则Git将不会验证其他存储库的证书签名。

  1. 全局禁用 Git 上的 SSL 验证:
    git config --global http.sslVerify false
    
    Run Code Online (Sandbox Code Playgroud)
  2. 克隆您的存储库:
    git clone <your repo>
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在 Git 上全局启用 SSL 验证:
    git config --global http.sslVerify true
    
    Run Code Online (Sandbox Code Playgroud)
  4. 将目录更改为您的存储库:
    cd <your repo>
    
    Run Code Online (Sandbox Code Playgroud)
  5. 仅在您的存储库上禁用 SSL 验证:
    git config --local http.sslVerify false
    
    Run Code Online (Sandbox Code Playgroud)

这是最容易实现的解决方案,但是您将跳过特定存储库的 SSL 验证,并且 Git 将不断显示安全警告消息:

warning: ----------------- SECURITY WARNING ----------------
warning: | TLS certificate verification has been disabled! |
warning: ---------------------------------------------------
warning: HTTPS connections may not be secure. See https://aka.ms/gcmcore-tlsverify for more information.
Run Code Online (Sandbox Code Playgroud)

将证书添加到 Windows 证书存储区

如果自签名证书已导入Windows证书存储区,则只需执行以下命令:

git config --global http.sslbackend schannel
Run Code Online (Sandbox Code Playgroud)

这将告诉 Git 从 Windows 证书存储中读取证书。请记住,这有时不起作用(由于某种原因从未对我起作用)。在这种情况下,您可以将自签名证书添加到 OpenSSL 证书包中。

将证书添加到 OpenSSL 证书包

一种高级方法是将自签名证书添加到 Git 可信证书包中。

  1. 获取自签名证书:

    openssl s_client -connect repo.domain.com:443
    
    Run Code Online (Sandbox Code Playgroud)

    复制(包括)之间的所有内容

    -----BEGIN CERTIFICATE-----
    ...   
    -----END CERTIFICATE-----
    
    Run Code Online (Sandbox Code Playgroud)
  2. 转到C:\Users\<user>\AppData\Local\Programs\Git\usr\ssl\certs,在您喜欢的编辑器中打开ca-bundle.crt文件并将证书粘贴到底部:

    # My Company Certifiate
    -----BEGIN CERTIFICATE-----
    ...   
    -----END CERTIFICATE-----
    
    Run Code Online (Sandbox Code Playgroud)
  3. 配置 Git 以用作openssl证书提供者:

    git config --global http.sslbackend openssl
    
    Run Code Online (Sandbox Code Playgroud)

    并设置证书包的路径:

    git config --global http.sslcainfo C:\Users\<user>\AppData\Local\Programs\Git\usr\ssl\certs\ca-bundle.crt
    
    Run Code Online (Sandbox Code Playgroud)
  4. 克隆您的存储库:

    git clone <your repo>
    
    Run Code Online (Sandbox Code Playgroud)

这是最佳解决方案,因为我们获得了 SSL 验证的好处,并且那些令人讨厌的安全警告消息将不再显示。


如果您在设置属性值时遇到此错误:

warning: http.sslverify has multiple values
error: cannot overwrite multiple values with a single value
       Use a regexp, --add or --replace-all to change http.sslVerify.
Run Code Online (Sandbox Code Playgroud)

打开您的.gitconfig文件并删除重复的http.sslverify行或它所抱怨的任何属性。


Cra*_*der 26

git config --global http.sslVerify false

  • 这不是一个好的解决方案,更好的解决方案是将自签名证书添加到受信任的证书中 (17认同)
  • 我_真的_希望“通过破坏 SSL 证书信任来降低安全性”不是这个问题的最佳答案。 (9认同)

cod*_*key 10

如果要添加自签名证书,请将所需的证书导出为 Base-64 编码的 .CER 文件。找到您的 Git cert.pem 文件(对我来说它位于C:\Program Files\Git\usr\ssl\cert.pem)。在文本编辑器中打开 .CER 文件,然后将内容复制/粘贴到 cert.pem 文件末尾。保存文件。然后打开你的控制台并输入

 git config --global http.sslCAInfo "C:\Program Files\Git\usr\ssl\cert.pem"
Run Code Online (Sandbox Code Playgroud)

  • 即使指向这个也会发生同样的错误。还有其他解决办法吗? (2认同)