Sunt blocat în spatele unui firewall, așa că trebuie să folosesc HTTPS pentru a accesa depozitul meu GitHub. Folosesc cygwin 1.7.7 pe Windows XP.
Am încercat să setez remote la https://[email protected]/username/ExcelANT.git
, dar pushing solicită o parolă, dar nu face nimic după ce am introdus-o.
https://username:<password>github.com/username/ExcelANT.git
și să clonez repo-ul gol de la zero, dar de fiecare dată îmi dă aceeași eroare
eroare: Problemă cu certificatul SSL, verificați dacă certificatul CA este OK. Detalii:
error:14090086:Rutine SSL:SSL3_GET_SERVER_CERTIFICATE:verificarea certificatului a eșuat la accesarea https://github.com/username/ExcelANT.git/info/refs
Dacă activez GIT_CURL_VERBOSE=1
obțin următoarele rezultate
* Pe cale să se conecteze() la github.com port 443 (#0) * Încercând 207.97.227.239... a setat cu succes locațiile de verificare a certificatului:
* CAfile: none CApath: /usr/ssl/certs * Problemă cu certificatul SSL, verificați dacă certificatul CA este în regulă. Detalii:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed * Expirare eliminată * Închiderea conexiunii #0 * Pe cale să se conecteze() la github.com port 443 (#0) * Încercând 207.97.227.239... a setat cu succes locațiile de verificare a certificatelor:
* CAfile: none CApath: /usr/ssl/certs * Problemă cu certificatul SSL, verificați dacă certificatul CA este în regulă. Detalii:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed * Expirare eliminată * Închiderea conexiunii #0 eroare: Problemă cu certificatul SSL, verificați dacă certificatul CA este OK. Detalii:
error:14090086:Rutine SSL:SSL3_GET_SERVER_CERTIFICATE:verificarea certificatului a eșuat la accesarea https://github.com/username/ExcelANT.git/info/refs
fatal: HTTP request failed
Este aceasta o problemă cu firewall-ul meu, cygwin sau ce?
Nu am setat proxy-ul HTTP în configurația Git, însă este un server ISA care are nevoie de autentificare NTLM, nu de bază, așa că, dacă nu știe cineva cum să forțeze git să folosească NTLM, sunt dat peste cap.
Problema este că nu aveți niciun certificat al Autorității de Certificare instalat pe sistemul dumneavoastră. Iar aceste certificate nu pot fi instalate cu setup.exe al cygwin's.
Actualizare: Instalați pachetul Net/ca-certificate în cygwin (mulțumiri dirkjot)
Există două soluții:
Fișierul cacert.pem
este ceea ce căutați. Acest fișier conține > 250 CA certs (don't know how to trust this number of ppl). Trebuie să descărcați acest fișier, împărțiți-l în certificate individuale, puneți-le în /usr/ssl/certs (CApath-ul dvs.) și indexați-le.
Iată cum se face acest lucru. Cu cygwin setup.exe instalați pachetele curl și openssl executați:
<!-- language: lang-bash -->
$ cd /usr/ssl/certs
$ curl http://curl.haxx.se/ca/cacert.pem |
awk '{print > "cert" (1+n) ".pem"} /-----END CERTIFICATE-----/ {n++}'
$ c_rehash
Important: Pentru a utiliza c_rehash
trebuie să instalați și openssl-perl
.
Ignorați verificarea certificatului SSL.
ATENȚIE: Dezactivarea verificării certificatelor SSL are implicații asupra securității. Fără verificarea autenticității conexiunilor SSL/HTTPS, un atacator rău intenționat poate să se dea drept un punct final de încredere (cum ar fi GitHub sau o altă gazdă Git la distanță), iar dumneavoastră veți fi vulnerabil la un Man-in-the-Middle Attack. Asigurați-vă că înțelegeți pe deplin problemele de securitate și modelul dvs. de amenințare înainte de a utiliza această soluție.
$ env GIT_SSL_NO_VERIFY=true git clone https://github...
Nu ezitați să treceți peste acest răspuns dacă doriți să rezolvați problema certificatelor. Acest răspuns se referă la tunelarea ssh prin firewall, ceea ce este, după părerea mea, o soluție mai bună pentru a rezolva problema firewall/proxy.
Există o modalitate mai bună decât utilizarea accesului http, și anume utilizarea serviciului ssh oferit de github pe portul 443 al serverului ssh.github.com.
Noi folosim un instrument numit corkscrew. Acesta este disponibil atât pentru CygWin (prin configurare de pe pagina de pornire cygwin), cât și pentru Linux, folosind instrumentul de împachetare preferat. Pentru MacOSX este disponibil cel puțin din macports și brew.
Linia de comandă este după cum urmează :
$ corkscrew <proxyhost> <proxyport> <targethost> <targetport> <authfile>
Proxyhost și proxyport sunt coordonatele proxy-ului https. Targethost și targetport reprezintă locația gazdei către care se realizează tunelul. Fișierul authfile este un fișier text cu 1 linie care conține numele de utilizator/parola serverului proxy, separate prin două puncte.
de exemplu
abc:very_secret
Instalare pentru utilizarea protocolului "normal" ssh pentru comunicarea git
Adăugând acest lucru în ~/.ssh/config
, acest truc poate fi folosit pentru conexiuni ssh normale.
Host github.com
HostName ssh.github.com
Port 443
User git
ProxyCommand corkscrew <proxyhost> <proxyport> %h %p ~/.ssh/proxy_auth
acum puteți testa dacă funcționează prin ssh-ing la gitproxy
pti@pti-laptop:~$ ssh github.com
PTY allocation request failed on channel 0
Hi ptillemans! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.
pti@pti-laptop:~$
(Notă: dacă nu v-ați conectat niciodată la github înainte, ssh va cere să adăugați cheia serverului la fișierul cu gazde cunoscute. Dacă sunteți paranoic, se recomandă să verificați amprenta RSA cu cea afișată pe site-ul github unde ați încărcat cheia).
O ușoară variantă a acestei metode este cazul în care aveți nevoie să accesați un depozit cu o altă cheie, de exemplu pentru a separa contul privat de contul profesional.
#
# account dedicated for the ACME private github account
#
Host acme.github.com
User git
HostName ssh.github.com
Port 443
ProxyCommand corkscrew <proxyhost> <3128> %h %p ~/.ssh/proxy_auth
IdentityFile ~/.ssh/id_dsa_acme
bucurați-vă!
Folosim acest lucru de ani de zile, atât pe Linux, cât și pe Mac și Windows.
Dacă doriți, puteți citi mai multe despre el în această postare pe blog.
I'am fost cu aceeași problemă pentru Solaris Express 11. Mi-a luat ceva timp, dar am reușit să găsesc unde trebuie plasate certificatele. Conform /etc/openssl/openssl.cnf, calea pentru certificate este /etc/openssl/certs. Am plasat certificatele generate folosind sfaturile de mai sus de la Alexey.
Puteți verifica dacă lucrurile funcționează folosind openssl în linia de comandă:
openssl s_client -connect github.com:443