Ошибка: gnutls_handshake() не удалось создать репозиторий GIT
При попытке клонирования репозитория git появляется следующая ошибка. У меня есть также открытые ключи rsa.
$ git clone https://github.com/blah/blah.git
Initialized empty Git repository in /home/arun/.git/
error: gnutls_handshake() failed: A TLS packet with unexpected length was
received. while accessing https://github.com/blah/blah.git/info/refs
fatal: HTTP request failed
Ответы
Ответ 1
Его можно использовать для GnuTLs или ошибки pycurl
Ниже приведен новый метод для pycurl_7.19.0-4ubuntu3:
sudo apt-get install build-essential fakeroot dpkg-dev
mkdir ~/python-pycurl-openssl
cd ~/python-pycurl-openssl
sudo apt-get source python-pycurl
sudo apt-get build-dep python-pycurl
sudo apt-get install libcurl4-openssl-dev
sudo dpkg-source -x pycurl_7.19.0-4ubuntu3.dsc
cd pycurl-7.19.0
# remove the HAVE_CURL_GNUTLS=1 in the following file
sudo vim debian/patches/10_setup.py.dpatch
# remove the HAVE_CURL_GNUTLS=1 in the following file
sudo vim setup.py
# replace all gnutls into openssl in the following file
sudo vim debian/control
sudo dpkg-buildpackage -rfakeroot -b
sudo dpkg -i ../python-pycurl_7.19.0-4ubuntu3_amd64.deb
Ответ 2
В моем случае, похоже, я не использовал pycurl, поэтому вышеупомянутое решение не сработало для меня. Работа DID была восстановлением git -core, измененным для использования openssl вместо gnutls.
Инструкции здесь:
https://askubuntu.com/questions/186847/error-gnutls-handshake-falied
Я заменил "git -core" на "git" в большинстве мест, файл .dsc(файл информации пакета?) появился как git -core_1.7.0.4-1ubuntu0.2.dsc, а пакет .deb вышел как git -core_1.7.0.4-1ubuntu0.2_i386.deb.
Ответ 3
У меня была такая же проблема, когда я попробовал sudo git fetch
из каталога, на которого у моего собственного пользователя не было достаточных прав. Я переместил репозиторий на /tmp
и продолжил свою работу.
Не забывайте, что /tmp
стирается после перезагрузки.
Ответ 4
У меня была эта проблема, и мне потребовалось некоторое время, чтобы найти решение. Я продолжал думать, что где-то я отсутствовал. Я не хотел перекомпилировать Git, так как я уже использовал последнюю версию, и я был уверен, что проблема не в том, что она сама Git.
Моя проблема была в моем файле .gitconfig
. Проблема возникла только на старом Linux-сервере, который многократно обновлялся на протяжении многих лет. В какой-то момент, по какой-то причине, я не помню, я явно указал sslVersion = sslv3
в моем файле .gitconfig
.
Когда я увидел это, лампочка продолжилась, так как я знаю, что SSL V3 устарел из-за проблем с безопасностью и что большинство людей должны использовать TLS вместо этого. Например, см. RFC 7568, https://tools.ietf.org/html/rfc7568
Таким образом, мое исправление включало либо удаление оскорбительной строки sslVersion = sslv3
из моего файла ~/.gitconfig
, либо изменение этого:
[httpd]
sslVersion = sslv3
:
[httpd]
sslVersion = tlsv1.2
Удаление строки и разрешение Git/libcurl согласовать шифрование показалось лучшим выбором, так как TLS v1.3 работает, и я не хочу снова сталкиваться с этой проблемой в будущем!