GitHub 在 Windows 上使用 git 的 HTTPS 证书错误 7

Https certificate errors for GitHub using git on Windows 7

目前,我收到此错误:

$ git clone https://github.com/square/haha.git
Cloning into 'haha'...
fatal: unable to access 'https://github.com/square/haha.git/': SSL certificate problem: self signed certificate in certificate chain

我在 Windows 7 机器上。我了解到 Github 的证书是由 DigiCert 签署的。如果我查看 Trusted Root Certification Authorities > Certificates,我会看到颁发给 DigiCert 的证书:

DigiCert Assured ID Root CA
DigiCert Assured ID Root G2
DigiCert Assured ID Root G3
DigiCert Global Root CA
DigiCert Global Root G2
DigiCert Global Root G3
DigiCert High Assurance EV Root CA
DigiCert Trusted Root G4

GitHub 证书是否包含在其中之一中? 如果是这样,我该如何使用它?如果没有我怎么得到它?

编辑 - 更多信息:
我可以将 sslVerify 设置为 false 并且它可以工作,但这当然不安全。
我可以使用 git:// 而不是 https://。这也有效,但不是 https。

我不能使用 SSH,因为这个环境没有设置代理。 使用 ssh:

    $ git clone ssh://github.com/square/haha.git
    Cloning into 'haha'...
    D:/Program Files/Git/usr/bin/bash: -c: line 0: syntax error near unexpected token `<'
    D:/Program Files/Git/usr/bin/bash: -c: line 0: `exec corkscrew <proxyhost> <proxyport> ssh.github.com 443 ~/.ssh/proxy_auth'
    write: Broken pipe
    fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

尝试

git -c http.sslVerify=false clone https://github.com/square/haha.git

或执行git config --global http.sslVerify false并再次克隆

想法是下载自签名证书,并在克隆时引用它:

git -c http.sslCAInfo=/path/to/self/signed/cert clone https://github.com/square/haha.git

例如,您可以使用 iwonbigbro/tools/bin/git-remote-install-cert.sh 来:

  • 下载所述证书(包括自签名证书)

    openssl s_client -connect
    
  • 注册该证书:

    git config --global http.sslCAPath "$HOME/.gitcerts"
    

(这里$HOME/.gitcerts是一个目录,所有证书都可以在git中找到)

该工具,因为它被称为 git-remote-install-cert.sh,由 git remote-install-cert(甚至在 Windows 上)执行。

我建议使用最新的 PortableGit-2.5.1-64-bit.7z.exe,在任何地方都未压缩(如 C:\prgs\PortableGit-2.5.1-64-bit)。
然后调用 C:\prgs\PortableGit-2.5.1-64-bit\git-bash.exe,检查 $PATH 并尝试 git remote-install-cert.


示例,在一个简单的 DOS 会话中,PATH 包括 C:\prgs\bin:
(它还包括C:\prgs\PortableGit-2.5.1-64-bit\bin,这意味着我在这里使用git 2.5.0)

  • 创建一个文件 C:\prgs\bin\git-remote-install-cert,您可以在其中复制 iwonbigbro/tools/bin/git-remote-install-cert.sh(因此在最终的本地脚本文件名中没有尾随 .sh
  • 将第 111 行从 mkdir -m 0700 -p ${cert%/*} 更改为 mkdir -p ${cert%/*}(但无需更改第 37 行)
  • 进入现有存储库。
    或者创建一个,并添加远程原点 url:
    (当然要根据自己的环境调整路径)

    cd C:\Users\vonc\prog
    git init b2d
    cd b2d
    git remote add origin https://github.com/VonC/b2d
    
  • 最后,调用那个 repo 中的脚本

    C:\Users\vonc\prog\b2d>git remote-install-cert
      Requesting certificate from the server...
      Certificate installed to: /c/Users/vonc/.gitcerts/github.com.crt
    

那会给你证书:

C:\Users\vonc\prog\b2d>type C:\Users\vonc\.gitcerts\github.com.crt
-----BEGIN CERTIFICATE-----
MIIF4DCCBMigAwIBAgIQDACTENIG2+M3VTWAEY3chzANBgkqhkiG9w0BAQsFADB1
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMTQwMgYDVQQDEytEaWdpQ2VydCBTSEEyIEV4dGVuZGVk
IFZhbGlkYXRpb24gU2VydmVyIENBMB4XDTE0MDQwODAwMDAwMFoXDTE2MDQxMjEy
MDAwMFowgfAxHTAbBgNVBA8MFFByaXZhdGUgT3JnYW5pemF0aW9uMRMwEQYLKwYB
BAGCNzwCAQMTAlVTMRkwFwYLKwYBBAGCNzwCAQITCERlbGF3YXJlMRAwDgYDVQQF
Ewc1MTU3NTUwMRcwFQYDVQQJEw41NDggNHRoIFN0cmVldDEOMAwGA1UEERMFOTQx
....

从那里,您仍然可以在那个 repo 中使用该证书获取:

cd C:\Users\vonc\prog\b2d
git config http.sslcapath C:\Users\vonc\.gitcerts
git fetch
git checkout master