2015-08-28 4 views
1

В настоящее время я получаю эту ошибку:Https ошибки сертификатов для GitHub с помощью мерзавца на 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. Если я смотрю в Доверенные корневые центры сертификации> Сертификаты, я вижу, выданных сертификатов 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. 
+1

Вы можете пойти в https://github.com в браузере? –

+0

Да. Я также могу установить sslVerify в false и получить репозиторий. –

+0

Можете ли вы клонировать через ssh? – jready

ответ

4

Идея заключается в том, чтобы загрузить самостоятельно подписанный сертификат, и ссылаться на него во время клона:

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 
    
  • Наконец, вызовите сценарий из этого репо

    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 
.... 

Оттуда, вы можете, по-прежнему в этом репо, принеси с помощью этого сертификата:

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

Ввод 'openssl s_client -connect' приводит к * использованию: s_client args * –

+0

@AlLelopath это был просто отрыв скрипта, иллюстрирующий команду, которая будет извлекать сертификат, но вы все еще должен выполнить скрипт, а не одну команду. – VonC

+0

Да, моя ошибка. Когда я выполняю скрипт, я получаю синтаксическую ошибку рядом с неожиданным токеном «<» *, строка 37 'done <<(git remote -v)' –

0

попробовать

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

или выполнить git config --global http.sslVerify false и клонировать снова

+0

Я не сделал этого, но я думаю, что причина в том, что я упомянул, что я уже пытался установить sslVerify на false. –

+0

Я вижу, вы пытаетесь использовать флаг '--global'? –

+0

Да, я попробовал --global, а также –