"Fehler: gnutls_handshake () fehlgeschlagen" beim Herstellen einer Verbindung zu https-Servern

62

Wenn ich versuche, eine Verbindung zu einem HTTPS-Server herzustellen git, wird der folgende Fehler angezeigt:

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

Ich denke, dass vielleicht einige Pakete, die im Zusammenhang gnutls_handshakestehen, kaputt gegangen sind . Also möchte ich diese neu installieren.

Welche Pakete können mit diesen Fehlern zusammenhängen? Oder wie behebe ich diese Art von Fehler?

Nyambaa
quelle
2
Diese andere Frage könnte helfen.
Christopher
1
In meinem Fall handelte es sich um einen einfachen Authentifizierungsserver, bei dem wir uns anmelden müssen, bevor wir das Internet nutzen können. Ich musste mich dort erst einloggen und dann verschwand der Fehler.
Sahil Singh

Antworten:

93

Bekam Grund des Problems, es war gnutlsPaket. Es funktioniert seltsam hinter einem Proxy. Funktioniert aber opensslauch in schwachem Netzwerk einwandfrei. So Abhilfe ist , dass wir zusammenstellen sollten gitmit openssl. Führen Sie dazu die folgenden Befehle aus:

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

(Denken Sie daran, es 1.7.9.5durch die aktuelle Version von git in Ihrem System zu ersetzen .)

Bearbeiten Sie dann die debian/controlDatei (führen Sie den Befehl aus:) gksu gedit debian/controlund ersetzen Sie alle Instanzen von libcurl4-gnutls-devmit libcurl4-openssl-dev.

Erstellen Sie dann das Paket (wenn es beim Test fehlschlägt, können Sie die Zeile TEST=testaus der Datei entfernen debian/rules):

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

Neues Paket installieren:

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


Inspiriert von hier: https://github.com/xmendez/wfuzz/wiki/PyCurlSSLBug

Nyambaa
quelle
2
Hatte das gleiche Problem nach dem Upgrade auf Ubuntu 14.04. Diese Lösung hat super funktioniert!
Vertti
1
Wenn Sie mit Linux Mint 16 arbeiten, müssen Sie unter "Software-Quellen" Quellen für offizielle Repositorys aktivieren. Sie müssen außerdem libcurl4-gnutls-dev deinstallieren und vor dem Kompilieren durch libcurl4-openssl-dev ersetzen.
Guillaume Perrot
1
Könnte den wundernden Köpfen helfen. Wenn Sie 'repo' verwenden, um ein Repository herunterzuladen (etwa Android-Quellcode) und auf das Problem mit dem gnutls-Handshake stoßen, funktioniert die Antwort von @ Nyambaa. Repo ist ein Skript, das von Git abhängt, also solltest du gut sein. Arbeitete wie Magie auf meinem Ubuntu 14.04 lts
KhoPhi
2
Shellscript für die (hauptsächlich meine) geistige Gesundheit der Menschen. github.com/SonOfLysander/git-openssl-shellscript/blob/master/…
Paul Nelson Baker
4
Die Tests im Build-Schritt dauern sehr lange. Wenn Sie den git-Betreuern vertrauen, empfehle ich nachdrücklich, die obigen Anweisungen zu befolgen, um sie zu überspringen, indem Sie die Testzeile TEST = aus debian / rules entfernen.
Eli Albert
9

Für mich stellte sich heraus, dass das SSL-Zertifikat selbst signiert war. Probieren Sie es aus

git config --global http.sslVerify false

Rick
quelle
9
Das ist eine schreckliche Idee. Es deaktiviert die gesamte Authentifizierung für jede TLS (SSL) -Verbindung, die von hergestellt wurde git, und entfernt den Schutz vor Man-in-the-Middle-Angriffen.
Curt J. Sampson