"ошибка: сбой gnutls_handshake()" при подключении к серверу https
Когда я пытаюсь подключиться к любому серверу HTTPS с git
, это дает следующую ошибку:
error: gnutls_handshake() failed: A TLS packet with unexpected length was received. while accessing ...
fatal: HTTP request failed
Я думаю, что, возможно, некоторые пакеты, которые связаны с gnutls_handshake
были сломаны. Итак, я хочу переустановить их.
Какие пакеты могут быть связаны с этими ошибками? Или как я могу исправить эту ошибку?
2 ответа
Получил причину проблемы, это было 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
Для меня это закончилось тем, что сертификат SSL был самоподписанным. Дайте это попробовать
git config --global http.sslVerify false
Об этом упоминается в одном из комментариев к другому ответу, но я считаю, что он должен быть более заметным Paul Nelson Baker написал сценарий оболочки, который для меня решил эту проблему..
Скрипт доступен в его репозитории https://github.com/paul-nelson-baker/git-openssl-shellscript и повторно компилирует git с openssl вместо gnutls. Прочтите README, чтобы прочитать всю историю, но у меня это сработало, поэтому спасибо, Пол.