“Erreur: gnutls_handshake () a échoué” lors de la connexion à des serveurs https

62

Lorsque j'essaie de me connecter à un serveur HTTPS avec git, cela donne l'erreur suivante:

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

Je pense que certains paquets liés à gnutls_handshakeont peut- être été cassés. Donc, je veux les réinstaller.

Quels paquets peuvent être liés à ces erreurs? Ou comment résoudre ce type d'erreur?

Nyambaa
la source
2
Cette autre question pourrait aider.
Christopher
1
Dans mon cas, c’était un simple serveur d’authentification auquel nous devions nous connecter avant d’utiliser Internet, ce qui nous gênait. Je devais d'abord me connecter là-bas, puis l'erreur a disparu.
Sahil Singh

Réponses:

93

Vous avez la raison du problème, c'était un gnutlspaquet. Cela fonctionne bizarre derrière un proxy. Mais opensslfonctionne bien même dans un réseau faible. Donc, la solution consiste à compiler gitavec openssl. Pour ce faire, exécutez les commandes suivantes:

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

(N'oubliez pas de remplacer 1.7.9.5par la version actuelle de git dans votre système.)

Ensuite, éditez le debian/controlfichier (exécutez la commande gksu gedit debian/control:) et remplacez toutes les instances de libcurl4-gnutls-devavec libcurl4-openssl-dev.

Puis construisez le paquet (si ça échoue lors du test, vous pouvez supprimer la ligne TEST=testdu fichier debian/rules):

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

Installer un nouveau paquet:

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


Inspiré d'ici: https://github.com/xmendez/wfuzz/wiki/PyCurlSSLBug

Nyambaa
la source
2
Avait ce même problème après la mise à niveau vers Ubuntu 14.04. Cette solution a très bien fonctionné!
vertti
1
Travaillant avec Linux Mint 16, vous devez accéder à "Sources de logiciel" et activer les sources sur les référentiels officiels. Vous devez également désinstaller libcurl4-gnutls-dev et le remplacer par libcurl4-openssl-dev avant la compilation.
Guillaume Perrot
1
Pourrait aider les esprits émerveillés. Si vous utilisez 'repo' pour télécharger un référentiel (par exemple, le code source Android) et rencontrer le problème gnutls-handshake, la réponse de @ Nyambaa fonctionne. Repo est un script qui dépend de Git, vous devriez donc être bon. A fonctionné comme par magie sur mon Ubuntu 14.04
lts
2
Shellscript pour la santé mentale des gens (principalement le mien). github.com/SonOfLysander/git-openssl-shellscript/blob/master/…
Paul Nelson Baker
4
les tests de la phase de construction prennent beaucoup de temps. si vous faites confiance aux responsables de git, je suggère fortement de suivre les instructions ci-dessus pour les ignorer en supprimant la ligne de test TEST = de debian / rules.
Eli Albert
9

Pour moi, le certificat SSL a été auto-signé. Essayez ceci

git config --global http.sslVerify false

Meule
la source
9
C'est une idée terrible. il désactive toute authentification pour chaque connexion TLS (SSL) établie par git, supprimant ainsi votre protection contre les attaques de type "man-in-the-middle".
Curt J. Sampson