Lỗi của lỗi: gnutls_handshake () không thành công khi kết nối với máy chủ https


62

Khi tôi cố gắng kết nối với bất kỳ máy chủ HTTPS nào git, nó sẽ báo lỗi sau:

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

Tôi nghĩ rằng có thể một số gói có liên quan gnutls_handshakeđã bị phá vỡ. Vì vậy, tôi muốn cài đặt lại những cái đó.

Những gói nào có thể liên quan đến những lỗi này? Hoặc làm thế nào để tôi sửa loại lỗi này?


2
Câu hỏi khác này có thể giúp đỡ.
Christopher

1
Trong trường hợp của tôi, đó là một máy chủ xác thực đơn giản, chúng tôi phải đăng nhập trước khi sử dụng internet. Tôi đã phải đăng nhập vào đó trước, và sau đó lỗi biến mất.
Sahil Singh

Câu trả lời:


93

Có lý do của vấn đề, đó là gnutlsgói. Nó hoạt động kỳ lạ đằng sau một proxy. Nhưng opensslđang hoạt động tốt ngay cả trong mạng yếu. Vì vậy, cách giải quyết là chúng ta nên biên dịch gitvới openssl. Để làm điều này, hãy chạy các lệnh sau:

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

(Hãy nhớ thay thế 1.7.9.5bằng phiên bản thực tế của git trong hệ thống của bạn.)

Sau đó, chỉnh sửa debian/controltệp (chạy lệnh gksu gedit debian/control:) và thay thế tất cả các phiên bản libcurl4-gnutls-devbằng libcurl4-openssl-dev.

Sau đó, xây dựng gói (nếu nó không thành công trong thử nghiệm, bạn có thể xóa dòng TEST=testkhỏi tệp debian/rules):

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

Cài đặt gói mới:

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


Lấy cảm hứng từ đây: https://github.com/xmendez/wfuzz/wiki/PyCurlSSLBug


2
Có vấn đề tương tự sau khi nâng cấp lên Ubuntu 14.04. Giải pháp này đã làm việc tuyệt vời!
vertti

1
Đã làm việc với Linux Mint 16, bạn phải truy cập "Nguồn phần mềm" và bật nguồn trên kho chính thức. Bạn cũng phải gỡ cài đặt libcurl4-gnutls-dev và thay thế bằng libcurl4-openssl-dev trước khi biên dịch.
Guillaume Perrot

1
Có thể giúp những tâm trí thắc mắc. Nếu bạn đang sử dụng 'repo' để tải xuống kho lưu trữ (giả sử mã nguồn Android) và gặp phải vấn đề bắt tay gnutls, câu trả lời của @ Nyambaa sẽ hoạt động. Repo là một kịch bản phụ thuộc vào Git, vì vậy bạn nên giỏi. Hoạt động như ma thuật trên Ubuntu 14.04 của tôi
KhoPhi

2
Shellscript cho sự tỉnh táo của mọi người (chủ yếu là của riêng tôi). github.com/SonOfLysander/git-openssl-shellscript/blob/master/ mẹo
Paul Nelson Baker

4
các bài kiểm tra trong bước xây dựng mất một thời gian thực sự dài. nếu bạn tin tưởng những người duy trì git, tôi khuyên bạn nên làm theo các hướng dẫn ở trên để bỏ qua chúng bằng cách xóa dòng TEST = test khỏi debian / quy tắc.
Eli Albert

9

Đối với tôi, cuối cùng chứng chỉ SSL là tự ký. Hãy thử cái này

git config --global http.sslVerify false


9
Đó là một ý tưởng tồi tệ; nó vô hiệu hóa tất cả xác thực cho mọi kết nối TLS (SSL) được tạo bởi git, loại bỏ sự bảo vệ của bạn khỏi các cuộc tấn công trung gian.
Curt J. Sampson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.