«Ошибка: ошибка gnutls_handshake ()» при подключении к серверу https

62

Когда я пытаюсь подключиться к любому серверу HTTPS с git, это выдает следующую ошибку:

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

Я думаю, что, возможно, некоторые пакеты, которые связаны с gnutls_handshake, были сломаны. Итак, я хочу переустановить их.

Какие пакеты могут быть связаны с этими ошибками? Или как я могу исправить эту ошибку?

Nyambaa
источник
2
Этот другой вопрос может помочь.
Кристофер
1
В моем случае это был простой сервер аутентификации, к которому мы должны войти, прежде чем использовать Интернет, который мешал. Сначала я должен был войти в систему, а затем ошибка исчезла.
Сахил Сингх,

Ответы:

93

Получил причину проблемы, это был gnutlsпакет. Это работает странно за прокси. Но opensslработает нормально даже в слабой сети. Поэтому обходной путь, что мы должны собрать gitс openssl. Для этого выполните следующие команды:

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

(Не забудьте заменить 1.7.9.5текущей версией git в вашей системе.)

Затем, редактировать debian/controlфайл (выполнить команду: gksu gedit debian/control) и заменить все экземпляры libcurl4-gnutls-devс libcurl4-openssl-dev.

Затем создайте пакет (если он не проходит тестирование, вы можете удалить строку TEST=testиз файла debian/rules):

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

Установите новый пакет:

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


Вдохновленный здесь: https://github.com/xmendez/wfuzz/wiki/PyCurlSSLBug

Nyambaa
источник
2
Возникла такая же проблема после обновления до Ubuntu 14.04. Это решение отлично сработало!
Вертти
1
Работая с Linux Mint 16, вы должны перейти к «Программным источникам» и включить источники в официальных репозиториях. Вы также должны удалить libcurl4-gnutls-dev и заменить на libcurl4-openssl-dev перед компиляцией.
Гийом Перро
1
Может помочь удивительным умам. Если вы используете 'repo' для загрузки репозитория (скажем, исходного кода Android) и столкнулись с проблемой gnutls-handshake, ответ @ Nyambaa сработает. Repo - это скрипт, который зависит от Git, поэтому вы должны быть хорошими. Работал как волшебство на моем Ubuntu 14.04
lts
2
Shellscript для здравомыслия людей (главным образом моего). github.com/SonOfLysander/git-openssl-shellscript/blob/master/…
Пол Нельсон Бейкер
4
тесты на этапе сборки занимают очень много времени. Если вы доверяете сопровождающим git, я настоятельно рекомендую следовать приведенным выше инструкциям, чтобы пропустить их, удалив строку теста TEST = test из debian / rules.
Эли Альберт
9

Для меня это закончилось тем, что сертификат SSL был самоподписанным. Дайте это попробовать

git config --global http.sslVerify false

стог
источник
9
Это ужасная идея; он отключает всю аутентификацию для каждого соединения TLS (SSL) git, удаляя защиту от атак «человек посередине».
Курт Дж. Сэмпсон