web-dev-qa-db-ja.com

httpsサーバーへの接続時に「エラー:gnutls_handshake()が失敗しました」

gitを使用してHTTPSサーバーに接続しようとすると、次のエラーが表示されます。

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

gnutls_handshakeに関連するいくつかのパッケージが壊れている可能性があります。だから、それらを再インストールしたい。

これらのエラーに関連するパッケージはどれですか?または、この種のエラーを修正するにはどうすればよいですか?

60
Nyambaa

問題の理由は、gnutlsパッケージでした。プロキシの背後で奇妙に動作しています。ただし、opensslは、弱いネットワークでも正常に機能しています。回避策は、gitopensslでコンパイルすることです。これを行うには、次のコマンドを実行します。

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

92
Nyambaa

私にとっては、SSL証明書が自己署名であることになりました。これを試してみてください

git config --global http.sslVerify false

9
Rick