"Errore: gnutls_handshake () non riuscito" durante la connessione ai server https


62

Quando provo a connettermi a qualsiasi server HTTPS con git, viene visualizzato il seguente errore:

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

Penso che forse alcuni pacchetti correlati gnutls_handshakesiano stati rotti. Quindi, voglio reinstallare quelli.

Quali pacchetti possono essere correlati a questi errori? O come posso correggere questo tipo di errore?


2
Quest'altra domanda potrebbe aiutare.
Christopher,

1
Nel mio caso si trattava di un semplice server di autenticazione, a cui dobbiamo accedere prima di utilizzare Internet, che stava arrivando. Ho dovuto prima effettuare il login e poi l'errore è scomparso.
Sahil Singh,

Risposte:


93

Ho ragione del problema, era un gnutlspacchetto. Funziona in modo strano dietro un proxy. Ma opensslfunziona bene anche in reti deboli. Così soluzione è che dobbiamo compilare gitcon openssl. Per fare ciò, esegui i seguenti comandi:

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

(Ricorda di sostituire 1.7.9.5con la versione attuale di git nel tuo sistema.)

Quindi, modifica il debian/controlfile (esegui il comando gksu gedit debian/control:) e sostituisci tutte le istanze di libcurl4-gnutls-devcon libcurl4-openssl-dev.

Quindi compilare il pacchetto (se il test non riesce, è possibile rimuovere la riga TEST=testdal file debian/rules):

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

Installa nuovo pacchetto:

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


Ispirato da qui: https://github.com/xmendez/wfuzz/wiki/PyCurlSSLBug


2
Ha avuto lo stesso problema dopo l'aggiornamento a Ubuntu 14.04. Questa soluzione ha funzionato alla grande!
vertti,

1
Lavorato con Linux Mint 16, devi andare su "Sorgenti software" e abilitare le fonti sui repository ufficiali. È inoltre necessario disinstallare libcurl4-gnutls-dev e sostituirlo con libcurl4-openssl-dev prima della compilazione.
Guillaume Perrot,

1
Potrebbe aiutare le menti meraviglie. Se stai usando 'repo' per scaricare un repository (ad esempio il codice sorgente Android) e ti imbatti nel problema gnutls-handshake, la risposta di @ Nyambaa funziona. Repo è uno script che dipende da Git, quindi dovresti essere bravo. Ha funzionato come per magia sul mio Ubuntu 14.04
lts

2
Shellscript per la sanità mentale (principalmente la mia). github.com/SonOfLysander/git-openssl-shellscript/blob/master/…
Paul Nelson Baker

4
i test nella fase di compilazione richiedono molto tempo. se ti fidi dei manutentori di git, ti consiglio vivamente di seguire le istruzioni sopra per saltarli rimuovendo il TEST = test line da debian / rules.
Eli Albert,

9

Per me, alla fine è stato che il certificato SSL era autofirmato. Fai una prova

git config --global http.sslVerify false


9
È un'idea terribile; disabilita tutta l' autenticazione per ogni connessione TLS (SSL) effettuata git, rimuovendo la protezione dagli attacchi man-in-the-middle.
Curt J. Sampson,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.