“ ข้อผิดพลาด: 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
คำถามอื่นนี้อาจช่วยได้
Christopher

1
ในกรณีของฉันมันเป็นเซิร์ฟเวอร์การตรวจสอบสิทธิ์อย่างง่ายซึ่งเราต้องเข้าสู่ระบบก่อนที่จะใช้อินเทอร์เน็ตซึ่งกำลังจะมา ฉันต้องเข้าสู่ระบบที่นั่นก่อนจากนั้นข้อผิดพลาดก็หายไป
Sahil Singh

คำตอบ:


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-devlibcurl4-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 วิธีนี้ใช้ได้ดีมาก!
จุดสุดยอด

1
ทำงานกับ Linux Mint 16 คุณต้องไปที่ "Software Sources" และเปิดใช้งานแหล่งข้อมูลบนคลังเก็บอย่างเป็นทางการ คุณต้องถอนการติดตั้ง libcurl4-gnutls-dev และแทนที่ด้วย libcurl4-openssl-dev ก่อนที่จะรวบรวม
Guillaume Perrot

1
อาจช่วยให้จิตใจที่สงสัย หากคุณใช้ 'repo' เพื่อดาวน์โหลดที่เก็บ (พูดซอร์สโค้ด Android) และพบปัญหา gnutls-handshake คำตอบของ @ Nyambaa จะใช้ได้ Repo เป็นสคริปต์ที่ขึ้นอยู่กับ Git ดังนั้นคุณควรจะดี ทำงานเหมือนเวทมนตร์บน Ubuntu 14.04 lts ของฉัน
KhoPhi

2
Shellscript เพื่อความมีสติ (ส่วนใหญ่เป็นของตัวเอง) ของผู้คน github.com/SonOfLysander/git-openssl-shellscript/blob/master/…
พอลเนลสันเบเกอร์

4
การทดสอบในขั้นตอนการสร้างใช้เวลานานมาก หากคุณเชื่อถือผู้ดูแลระบบคอมไพล์ฉันขอแนะนำให้ทำตามคำแนะนำด้านบนเพื่อข้ามพวกเขาโดยลบ TEST = test line ออกจาก debian / rules
Eli Albert

9

สำหรับฉันมันเป็นใบรับรอง SSL ที่ลงชื่อด้วยตัวเอง ลองดูสิ

git config --global http.sslVerify false


9
นั่นเป็นความคิดที่แย่มาก จะปิดใช้งานการตรวจสอบสิทธิ์ทั้งหมดสำหรับการเชื่อมต่อ TLS (SSL) ทุกครั้งที่ทำโดยgitการเอาการป้องกันของคุณออกจากการโจมตีแบบคนกลาง
Curt J. Sampson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.