„Błąd: błąd gnutls_handshake () nie powiódł się” podczas łączenia z serwerami https

62

Kiedy próbuję połączyć się z dowolnym serwerem HTTPS git, pojawia się następujący błąd:

error: gnutls_handshake() failed: A TLS packet with unexpected length was received. while accessing ...
fatal: HTTP request failed

Myślę, że może niektóre pakiety, które są powiązane gnutls_handshake, zostały zepsute. Chcę je ponownie zainstalować.

Które pakiety mogą być powiązane z tymi błędami? Lub jak naprawić tego rodzaju błąd?

Nyambaa
źródło
2
To inne pytanie może pomóc.
Christopher
1
W moim przypadku był to prosty serwer uwierzytelniający, do którego musimy się zalogować, zanim skorzystamy z internetu, który nam przeszkadzał. Najpierw musiałem się tam zalogować, a następnie błąd zniknął.
Sahil Singh

Odpowiedzi:

93

Mam powód problemu, to była gnutlspaczka. Dziwnie działa za serwerem proxy. Ale openssldziała dobrze nawet w słabej sieci. Rozwiązaniem jest więc, że powinniśmy skompilować gitz openssl. Aby to zrobić, uruchom następujące polecenia:

sudo apt-get update
sudo apt-get install build-essential fakeroot dpkg-dev
sudo apt-get build-dep git
mkdir ~/git-openssl
cd ~/git-openssl
apt-get source git
dpkg-source -x git_1.7.9.5-1.dsc
cd git-1.7.9.5

(Pamiętaj, aby zastąpić 1.7.9.5aktualną wersją git w twoim systemie).

Następnie edytuj debian/controlplik (uruchom polecenie: gksu gedit debian/control) i zastąpić wszystkie wystąpienia libcurl4-gnutls-devz libcurl4-openssl-dev.

Następnie zbuduj pakiet (jeśli test nie powiedzie się, możesz usunąć wiersz TEST=testz pliku debian/rules):

sudo apt-get install libcurl4-openssl-dev
sudo dpkg-buildpackage -rfakeroot -b

Zainstaluj nowy pakiet:

i386: sudo dpkg -i ../git_1.7.9.5-1_i386.deb

x86_64: sudo dpkg -i ../git_1.7.9.5-1_amd64.deb


Inspirowany tutaj: https://github.com/xmendez/wfuzz/wiki/PyCurlSSLBug

Nyambaa
źródło
2
Ten sam problem występował po aktualizacji do Ubuntu 14.04. To rozwiązanie działało świetnie!
vertti
1
Pracując z Linux Mint 16, musisz przejść do „Źródeł oprogramowania” i włączyć źródła w oficjalnych repozytoriach. Musisz także odinstalować libcurl4-gnutls-dev i zastąpić libcurl4-openssl-dev przed kompilacją.
Guillaume Perrot
1
Może pomóc cudownym umysłom. Jeśli używasz repozytorium do pobrania repozytorium (powiedzmy kod źródłowy Androida) i natkniesz się na problem z handshake'em gnutls, odpowiedź @ Nyambaa działa. Repo to skrypt, który zależy od Gita, więc powinieneś być dobry. Działa jak magia na moim Ubuntu 14.04
lts
2
Skrypt dla ludzkiego zdrowia (głównie mojego). github.com/SonOfLysander/git-openssl-shellscript/blob/master/…
Paul Nelson Baker
4
testy na etapie kompilacji zajmują naprawdę dużo czasu. jeśli ufasz opiekunom git, zdecydowanie sugeruję wykonanie powyższych instrukcji, aby je pominąć, usuwając wiersz testowy TEST = z debian / rules.
Eli Albert
9

Dla mnie skończyło się to tym, że certyfikat SSL został samopodpisany. Spróbuj tego

git config --global http.sslVerify false

Stóg
źródło
9
To okropny pomysł; wyłącza wszystkie uwierzytelnianie dla każdego połączenia TLS (SSL) git, które usuwa, usuwając ochronę przed atakami typu man-in-the-middle.
Curt J. Sampson,