"Помилка: помилка 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, були зламані. Отже, я хочу їх знову встановити.

Які пакети можуть бути пов’язані з цими помилками? Або як я можу виправити таку помилку?


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


2
Цю проблему виникло після оновлення до Ubuntu 14.04. Це рішення спрацювало чудово!
vertti

1
Працюючи з Linux Mint 16, вам потрібно перейти до "Джерела програмного забезпечення" та включити джерела в офіційних сховищах. Ви також повинні видалити libcurl4-gnutls-dev та замінити їх на libcurl4-openssl-dev перед компілюванням.
Гійом Перро

1
Може допомогти дивовижним розумам. Якщо ви використовуєте 'repo' для завантаження сховища (скажімо, вихідний код андроїда) і стикаєтеся з проблемою рукостискання gnutls, відповідь @ Nyambaa працює. Repo - це сценарій, який залежить від Git, тому ви повинні бути хорошими. Працював, як магія, на моєму Ubuntu 14.04 lts
KhoPhi

2
Оболонка для людського (в основному мого власного) розуму. github.com/SonOfLysander/git-openssl-shellscript/blob/master/…
Пол Нельсон Бейкер

4
тести на етапі збирання займають дуже багато часу. якщо ви довіряєте підтримкам git, я настійно пропоную дотримуватися вищезазначених інструкцій, щоб пропустити їх, видаливши TEST = тестову лінію з debian / правила.
Елі Альберт

9

Для мене виявилося, що сертифікат SSL був самопідписаний. Спробуйте це

git config --global http.sslVerify false


9
Це жахлива ідея; він вимикає всю аутентифікацію для кожного TLS (SSL) з'єднання, зробленого git, видаляючи ваш захист від атаки "людина-в-середині".
Керт Дж. Сампсон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.