“Error: gnutls_handshake () falhou” ao conectar-se a servidores https

62

Quando tento conectar-me a qualquer servidor HTTPS git, ele apresenta o seguinte erro:

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

Eu acho que talvez alguns pacotes relacionados gnutls_handshaketenham sido quebrados. Então, eu quero reinstalar aqueles.

Quais pacotes podem estar relacionados a esses erros? Ou como faço para corrigir esse tipo de erro?

Nyambaa
fonte
2
Essa outra pergunta pode ajudar.
Christopher
11
No meu caso, era um servidor de autenticação simples, no qual precisamos fazer o login antes de usar a Internet, o que estava atrapalhando. Eu tive que entrar lá primeiro e depois o erro desapareceu.
Sahil Singh

Respostas:

93

Tenho razão do problema, era gnutlspacote. Está trabalhando estranho atrás de um proxy. Mas opensslestá funcionando bem, mesmo em redes fracas. Então solução alternativa é que nós deve compilar gitcom openssl. Para fazer isso, execute os seguintes comandos:

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

(Lembre-se de substituir 1.7.9.5pela versão atual do git no seu sistema.)

Em seguida, edite o debian/controlarquivo (execute o comando gksu gedit debian/control:) e substitua todas as instâncias de libcurl4-gnutls-devpor libcurl4-openssl-dev.

Em seguida, crie o pacote (se estiver falhando no teste, você poderá remover a linha TEST=testdo arquivo debian/rules):

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

Instale um novo pacote:

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


Inspirado aqui: https://github.com/xmendez/wfuzz/wiki/PyCurlSSLBug

Nyambaa
fonte
2
Teve esse mesmo problema após a atualização para o Ubuntu 14.04. Esta solução funcionou muito bem!
Vertti
11
Trabalhou com o Linux Mint 16, você precisa ir para "Fontes de software" e ativar fontes em repositórios oficiais. Você também deve desinstalar o libcurl4-gnutls-dev e substituir por libcurl4-openssl-dev antes da compilação.
Guillaume Perrot
11
Pode ajudar as mentes que pensam. Se você estiver usando o 'repo' para baixar um repositório (por exemplo, código fonte do Android) e encontrar o problema do aperto de mão gnutls, a resposta do @ Nyambaa funciona. Repo é um script que depende do Git, então você deve ser bom. Funcionou como mágica no meu Ubuntu 14.04 lts
KhoPhi 16/11
2
Shellscript para a sanidade das pessoas (principalmente a minha). github.com/SonOfLysander/git-openssl-shellscript/blob/master/…
Paul Nelson Baker
4
os testes na etapa de construção demoram muito tempo. se você confia nos mantenedores do git, sugiro seguir as instruções acima para ignorá-los removendo a linha de teste TEST = do debian / rules.
Eli Albert
9

Para mim, acabou sendo que o certificado SSL foi autoassinado. Faça uma tentativa

git config --global http.sslVerify false

Rick
fonte
9
Essa é uma péssima ideia; desativa toda a autenticação para todas as conexões TLS (SSL) feitas git, removendo sua proteção contra ataques do tipo man-in-the-middle.
Curt J. Sampson