“Error: gnutls_handshake () gagal” saat menghubungkan ke server https

62

Ketika saya mencoba terhubung ke server HTTPS dengan git, itu memberikan kesalahan berikut:

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

Saya pikir mungkin beberapa paket yang terkait gnutls_handshaketelah rusak. Jadi, saya ingin menginstalnya kembali.

Paket mana yang bisa dikaitkan dengan kesalahan ini? Atau bagaimana cara memperbaiki kesalahan semacam ini?

Nyambaa
sumber
2
Pertanyaan lain ini mungkin bisa membantu.
Christopher
1
Dalam kasus saya itu adalah server otentikasi sederhana, yang harus kita masuki sebelum menggunakan internet, yang menghalangi jalan. Saya harus masuk ke sana dulu, dan kemudian kesalahannya hilang.
Sahil Singh

Jawaban:

93

Punya alasan masalah, itu gnutlspaket. Ini bekerja aneh di belakang proxy. Tetapi opensslbekerja dengan baik bahkan di jaringan yang lemah. Jadi solusi adalah bahwa kita harus mengkompilasi gitdengan openssl. Untuk melakukan ini, jalankan perintah berikut:

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

(Ingatlah untuk mengganti 1.7.9.5dengan versi git yang sebenarnya di sistem Anda.)

Kemudian, edit debian/controlfile (jalankan perintah gksu gedit debian/control:) dan ganti semua instance libcurl4-gnutls-devdengan libcurl4-openssl-dev.

Kemudian buat paket (jika gagal saat pengujian, Anda dapat menghapus baris TEST=testdari file debian/rules):

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

Instal paket baru:

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


Terinspirasi dari sini: https://github.com/xmendez/wfuzz/wiki/PyCurlSSLBug

Nyambaa
sumber
2
Punya masalah yang sama setelah memutakhirkan ke Ubuntu 14.04. Solusi ini berhasil!
vertti
1
Bekerja dengan Linux Mint 16, Anda harus pergi ke "Sumber Perangkat Lunak" dan mengaktifkan sumber pada repositori resmi. Anda juga harus menghapus libcurl4-gnutls-dev dan menggantinya dengan libcurl4-openssl-dev sebelum melakukan kompilasi.
Guillaume Perrot
1
Mungkin bisa membantu pikiran yang bertanya-tanya. Jika Anda menggunakan 'repo' untuk mengunduh repositori (misalnya kode sumber android) dan menemukan masalah gnutls-handshake, jawaban @ Nyamba berfungsi. Repo adalah skrip yang bergantung pada Git, jadi Anda harus baik. Bekerja seperti sulap di Ubuntu saya 14,04 lts
KhoPhi
2
Shellscript untuk kewarasan orang (terutama saya sendiri). github.com/SonOfLysander/git-openssl-shellscript/blob/master/…
Paul Nelson Baker
4
tes dalam langkah pembangunan memakan waktu sangat lama. jika Anda mempercayai pengelola git, saya sangat menyarankan mengikuti instruksi di atas untuk melewati mereka dengan menghapus TEST = test line dari debian / rules.
Eli Albert
9

Bagi saya, pada akhirnya sertifikat SSL ditandatangani sendiri. Cobalah ini

git config --global http.sslVerify false

Rick
sumber
9
Itu ide yang buruk; itu menonaktifkan semua otentikasi untuk setiap koneksi TLS (SSL) yang dibuat oleh git, menghapus perlindungan Anda dari serangan man-in-the-middle.
Curt J. Sampson