ใบรับรอง SSL ถูกปฏิเสธพยายามเข้าถึง GitHub ผ่าน HTTPS หลังไฟร์วอลล์


389

ฉันติดอยู่หลังไฟร์วอลล์ดังนั้นต้องใช้ HTTPS เพื่อเข้าถึงที่เก็บ GitHub ของฉัน ฉันใช้ cygwin 1.7.7 บน Windows XP

ฉันได้ลองตั้งค่ารีโมตเป็นhttps://username@github.com/username/ExcelANT.gitแล้ว แต่ได้รับการแจ้งเตือนให้ใส่รหัสผ่าน แต่ไม่ได้ทำอะไรเลยเมื่อฉันป้อนมัน https://username:<password>github.com/username/ExcelANT.gitและการโคลน repo ที่ว่างเปล่าตั้งแต่เริ่มต้น แต่ทุกครั้งมันทำให้ฉันมีข้อผิดพลาดเหมือนกัน

ข้อผิดพลาด: ปัญหาใบรับรอง SSL ตรวจสอบว่าใบรับรอง CA นั้นตกลง รายละเอียด:
ข้อผิดพลาด: 14090086: รูทีน SSL: SSL3_GET_SERVER_CERTIFICATE: การตรวจสอบใบรับรองล้มเหลวขณะเข้าถึงhttps://github.com/username/ExcelANT.git/info/refs

เปิดใช้GIT_CURL_VERBOSE=1ให้ฉัน

* เกี่ยวกับการเชื่อมต่อ () กับ github.com พอร์ต 443 (# 0)
* ลอง 207.97.227.239 ... * ตั้งค่าสถานที่ตรวจสอบใบรับรองเรียบร้อยแล้ว:
* CAfile: ไม่มี
CApath: / usr / ssl / certs
* ปัญหาใบรับรอง SSL ตรวจสอบว่า ใบรับรอง CA ตกลง รายละเอียด:
ข้อผิดพลาด: 14090086: รูทีน SSL: SSL3_GET_SERVER_CERTIFICATE: การตรวจสอบใบรับรองล้มเหลว
* หมดอายุการล้าง
* การเชื่อมต่อปิด # 0
* เกี่ยวกับการเชื่อมต่อ () ไปยังพอร์ต github.com 443 (# 0)
* ลอง 207.97.227.239 ... ตรวจสอบสถานที่:
* CAfile: none
CApath: / usr / ssl / certs
* ปัญหาใบรับรอง SSL ตรวจสอบว่าใบรับรอง CA นั้นถูกต้อง รายละเอียด:
ข้อผิดพลาด: 14090086: รูทีน SSL: SSL3_GET_SERVER_CERTIFICATE: การตรวจสอบใบรับรองล้มเหลว
* หมดอายุการล้าง
*
ข้อผิดพลาดการเชื่อมต่อปิด # 0 : ปัญหาใบรับรอง SSL ตรวจสอบว่าใบรับรอง CA นั้นถูกต้อง รายละเอียด:
ข้อผิดพลาด: 14090086: รูทีน SSL: SSL3_GET_SERVER_CERTIFICATE: การตรวจสอบใบรับรองล้มเหลวขณะเข้าถึงhttps://github.com/username/ExcelANT.git/info/refs

fatal: HTTP request failed

นี่เป็นปัญหาของไฟร์วอลล์, cygwin หรืออะไรนะ?

ฉันไม่ได้ตั้งค่าพร็อกซี HTTP ในการกำหนดค่า Git แต่เป็นเซิร์ฟเวอร์ ISA ที่ต้องการการรับรองความถูกต้องของ NTLM ไม่ใช่ขั้นพื้นฐานดังนั้นหากไม่มีใครรู้วิธีบังคับให้ git ใช้ NTLM ฉันก็เป็นผู้จัดหา


หากฉันตั้งค่า http.sslVerify เป็นเท็จการเชื่อมต่อจะปลอดภัยหรือไม่ และเป็นเส้นทางที่ดีในการใช้งานอย่างไร ในระหว่างที่เรากำลังใช้ไฟร์วอลล์ pfsense ตอนนี้ไฟล์. gitconfig ในโปรไฟล์ผู้ใช้ว่างเปล่า
Nullpointer

คำตอบ:


57

อย่าลังเลที่จะตอบคำถามนี้หากคุณต้องการแก้ไขปัญหาใบรับรอง คำตอบนี้เกี่ยวข้องกับ tunneling ssh ผ่านไฟร์วอลล์ซึ่งเป็น IMHO ทางออกที่ดีกว่าในการจัดการกับสิ่งไฟร์วอลล์ / พร็อกซี

มีวิธีที่ดีกว่าการใช้การเข้าถึง http และนั่นคือการใช้บริการ ssh ที่นำเสนอโดย github บนพอร์ต 443 ของเซิร์ฟเวอร์ ssh.github.com

เราใช้เครื่องมือที่เรียกว่าเหล็กไขจุก ใช้ได้ทั้ง CygWin (ผ่านการตั้งค่าจากโฮมเพจ cygwin) และ Linux โดยใช้เครื่องมือบรรจุภัณฑ์ที่คุณโปรดปราน สำหรับ MacOSX มีให้จาก macports และก่ออย่างน้อย

commandline เป็นดังนี้:

$ corkscrew <proxyhost> <proxyport> <targethost> <targetport> <authfile>

proxyhost และ proxyport เป็นพิกัดของ https proxy ทาร์ ธ เทรตและพอร์ตเป้าหมายคือที่ตั้งของโฮสต์ที่จะทำการอุโมงค์ authfile เป็นไฟล์ข้อความที่มี 1 บรรทัดที่มีชื่อผู้ใช้ / รหัสผ่านเซิร์ฟเวอร์พร็อกซีของคุณคั่นด้วยเครื่องหมายโคลอน

เช่น:

abc:very_secret

การติดตั้งสำหรับการใช้โปรโตคอล "ปกติ" ssh สำหรับการสื่อสาร git

โดยการเพิ่มสิ่งนี้ไปยัง~/.ssh/configเคล็ดลับนี้สามารถใช้สำหรับการเชื่อมต่อ ssh ปกติ

Host github.com
  HostName ssh.github.com
  Port 443
  User git
  ProxyCommand corkscrew <proxyhost> <proxyport> %h %p ~/.ssh/proxy_auth

ตอนนี้คุณสามารถทดสอบการทำงานโดย ssh-ing ถึง gitproxy

pti@pti-laptop:~$ ssh github.com
PTY allocation request failed on channel 0
Hi ptillemans! You've successfully authenticated, but GitHub does not provide shell access.
       Connection to github.com closed.
pti@pti-laptop:~$

(หมายเหตุ: หากคุณไม่เคยลงชื่อเข้าใช้ Github มาก่อน ssh จะขอให้เพิ่มรหัสเซิร์ฟเวอร์ไปยังไฟล์โฮสต์ที่รู้จักถ้าคุณหวาดระแวงเราขอแนะนำให้คุณตรวจสอบลายนิ้วมือ RSA กับที่แสดงบนเว็บไซต์ Github ที่คุณ อัปโหลดคีย์ของคุณ)

วิธีการที่แตกต่างกันเล็กน้อยในกรณีนี้คือเมื่อคุณจำเป็นต้องเข้าถึงที่เก็บด้วยรหัสอื่นเช่นแยกบัญชีส่วนตัวของคุณออกจากบัญชีมืออาชีพของคุณ

# 
# account dedicated for the ACME private github account 
#
Host acme.github.com
  User git
  HostName ssh.github.com
  Port 443
  ProxyCommand corkscrew <proxyhost> <3128> %h %p ~/.ssh/proxy_auth
  IdentityFile ~/.ssh/id_dsa_acme

สนุก!

เราใช้สิ่งนี้มานานหลายปีแล้วทั้งบน Linux, Mac และ Windows

หากคุณต้องการคุณสามารถอ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ในโพสต์บล็อกนี้


ฉันยอมแพ้ในการทำงานนี้ แต่ได้ดูอีกครั้งและได้ทำงาน เปลี่ยน. ssh / config เป็น> Host ssh.github.com >User oharab >Hostname ssh.github.com >Port 443 >PreferredAuthentications publickey >IdentityFile ~/.ssh/id_rsa และการโคลนโดยใช้ git clone git@ssh.github.com:oharab/log4vba.gitทำให้มันทำงานได้ทันที
oharab

1
ฉัน downvoting เพียงเพราะคำตอบด้านล่างมีประโยชน์มากกว่า แต่น่าเสียดายที่ stackoverflow มักให้คำตอบที่ยอมรับได้เสมอแม้ว่ามันจะเป็นเพียงคำตอบสำหรับสถานการณ์เดียว
mjaggard

1
ไม่ว่าในกรณีใดฉันได้อัปเดตคำตอบเนื่องจากฉันพบว่า SSL tunneling ผ่าน https proxy ยังคงเป็นทางออกที่ดีกว่าการเล่นซอกับใบรับรอง HTTPS หรือปิดการใช้งานและปิดท้ายด้วยโซลูชันที่ยังมีประสิทธิภาพน้อยกว่าใช้งานง่ายและปลอดภัยน้อยกว่า มี upvotes มากมายพิสูจน์ให้เห็นว่าฉันผิด แต่ฉันยังยึดความคิดเห็นของฉันในเรื่องนี้อยู่ดี
Peter Tillemans

523

ปัญหาคือคุณไม่มีใบรับรองผู้ออกใบรับรองใด ๆ ติดตั้งอยู่ในระบบของคุณ และไฟล์เหล่านี้ไม่สามารถติดตั้งได้ด้วย setup.exe ของ cygwin

ปรับปรุง: ติดตั้งแพคเกจ Net / ca- ใบรับรองใน cygwin (ขอบคุณ dirkjot)

มีสองวิธีแก้ไข:

  1. ติดตั้งใบรับรองหลักจริง ๆ พวก Curl สกัดสำหรับใบรับรองคุณจาก Mozilla

    cacert.pemไฟล์คือสิ่งที่คุณกำลังมองหา ไฟล์นี้มี> 250 CA certs (ไม่ทราบวิธีเชื่อถือจำนวน ppl นี้) คุณต้องดาวน์โหลดไฟล์นี้แยกเป็นใบรับรองแต่ละใบนำไปไว้ใน / usr / ssl / certs (CApath ของคุณ) และสร้างดัชนี

    นี่คือวิธีที่จะทำ ด้วย cygwin setup.exe การติดตั้ง curl และแพ็คเกจ openssl ดำเนินการ:

    $ cd /usr/ssl/certs
    $ curl http://curl.haxx.se/ca/cacert.pem |
      awk '{print > "cert" (1+n) ".pem"} /-----END CERTIFICATE-----/ {n++}'
    $ c_rehash

    สำคัญ : ในการใช้งานc_rehashคุณจะต้องติดตั้งopenssl-perlด้วย

  2. ละเว้นการตรวจสอบใบรับรอง SSL

    คำเตือน: การปิดใช้งานการตรวจสอบใบรับรอง SSL มีผลกระทบด้านความปลอดภัย โดยไม่ต้องตรวจสอบความถูกต้องของการเชื่อมต่อ SSL / HTTPS การโจมตีที่เป็นอันตรายสามารถปลอมตัวเป็นปลายทางที่เชื่อถือได้ (เช่น GitHub หรือบางโฮสต์ Git ระยะไกลอื่น ๆ ) และคุณจะเสี่ยงที่จะ Man-in-the-Middle โจมตี ให้แน่ใจว่าคุณเข้าใจปัญหาด้านความปลอดภัยและรูปแบบการคุกคามของคุณอย่างสมบูรณ์ก่อนที่จะใช้วิธีนี้เป็นวิธีแก้ไขปัญหา

    $ env GIT_SSL_NO_VERIFY=true git clone https://github...
    

9
คุณไม่จำเป็นต้องติดตั้ง curl เพียงใช้ wget:wget -O - http://curl.haxx.se/ca/cacert.pem | awk 'split_after==1{n++;split_a fter=0} /-----END CERTIFICATE-----/ {split_after=1} {print > "cert" n ".pem"}'
Deebster

38
ฉันรู้ว่านี่คือ cygwin แต่ในกรณีที่ทุกคนมาที่นี่โดยใช้ Centos เป็น / etc / pki / tls / certs ที่. pem ควรไป
หยุดการใส่ร้ายโมนิก้า Cellio

2
ไม่ได้ผลสำหรับฉัน - แต่ฉันไม่มี c_rehash ในเส้นทางของฉัน ฉันลองรีสตาร์ทเชลล์ ฉันยังต้อง mkdir -p / usr / ssl / certs ฉันสงสัยว่าการติดตั้ง Cygwin ของฉันแตกต่างหรือขาดอะไรไปหรือเปล่า? นอกจากนี้การตั้งค่า GIT_SSL_NO_VERIFY = true ตามด้วยการเรียกใช้การดำเนินการโคลนส่งผลให้เกิดข้อผิดพลาดนี้: fatal: https://code.google.com/.../info/refs not found: did you run git update-server-info on the server?อาจจะใช้งานได้หลังจากรีบูตหรือไม่
Jeff Axelrod

7
คำตอบนี้ผิด เพียงติดตั้งca-certificatesแพคเกจcygwin เพื่อรับใบรับรองหลักที่หายไป ทำไมคำตอบนี้ถึงมีจำนวนมาก
rurban

32
อย่าปิดการตรวจสอบใบรับรอง SSL สิ่งนี้เกิดขึ้นบ่อยครั้งในเครื่องมือและรหัสแอปพลิเคชันทั่วทั้งอุตสาหกรรม มันเปิดคุณขึ้นกับผู้ชายคนหนึ่งในการโจมตีกลาง หากคุณกำลังจะใช้ SSL ให้ใช้อย่างถูกต้อง
ทิม

430

หมายเหตุ: การปิดใช้งานการตรวจสอบ SSL มีผลกระทบต่อการรักษาความปลอดภัย จะช่วยให้ Man in the Middle Attack เมื่อคุณใช้ Git เพื่อถ่ายโอนข้อมูลผ่านเครือข่าย ต้องแน่ใจว่าคุณเข้าใจอย่างเต็มที่ถึงผลกระทบด้านความปลอดภัยก่อนที่จะใช้สิ่งนี้เป็นโซลูชัน หรือดีกว่าให้ติดตั้งใบรับรองหลัก

วิธีหนึ่งคือปิดใช้งานการยืนยัน SSL CERT:

git config --global http.sslVerify false

สิ่งนี้จะป้องกันไม่ให้ CURL รับรองความถูกต้อง HTTPS

สำหรับที่เก็บเดียวเท่านั้น:

git config http.sslVerify false

17
หากคุณไม่ต้องการแก้ไขการตั้งค่าส่วนกลางของคุณ (เช่น repos ทั้งหมด) ไม่รวม --global
Erin

57
คุณช่วยเพิ่มบันทึกเกี่ยวกับความอันตรายที่ร้ายแรงนี้ได้อย่างไร
Chronial

26
นี่เป็นความคิดที่แย่มาก มีเหตุผลที่ควรตรวจสอบใบรับรอง หากคุณไม่ได้ตรวจสอบใบรับรองว่าเชื่อถือได้ใคร ๆ ก็สามารถสร้างใบรับรองขึ้นมาได้และคุณอาจมีความเสี่ยงต่อผู้ชายในการโจมตีระดับกลาง
Mark Carey

24
อย่าปิดการตรวจสอบ SSL!
ทิม

14
สำหรับทุกคน "อย่าทำ" คน: แน่นอนว่านี่ไม่ใช่วิธีที่ปลอดภัยที่สุดเลย แต่มันเป็นตัวเลือกที่ดีกว่าที่จะไม่มี SSL เลย! เพราะบางคนใช้แค่เซิร์ฟเวอร์ git ที่เรียบง่ายส่วนตัวของพวกเขาที่มันก็ดีสำหรับพวกเขา แน่นอนว่าเพื่อความปลอดภัยที่แท้จริงจะไม่มีการตั้งค่าไป สิ่งที่ไม่ปลอดภัยที่สุดคือการส่งไบต์ธรรมดาผ่านเครือข่าย
Peter Stegnar

109

ฉันต้องการให้ Git ใช้ชุดใบรับรองที่อัปเดตโดยไม่ต้องแทนที่ชุดที่ระบบของฉันใช้ทั้งหมด ต่อไปนี้เป็นวิธีใช้ Git ใช้ไฟล์เฉพาะในโฮมไดเร็กตอรี่ของฉัน:

mkdir ~/certs
curl http://curl.haxx.se/ca/cacert.pem -o ~/certs/cacert.pem

ตอนนี้อัปเดต.gitconfigเพื่อใช้สิ่งนี้สำหรับการยืนยันแบบเพียร์:

[http]
sslCAinfo = /home/radium/certs/cacert.pem

หมายเหตุฉันใช้เส้นทางที่แน่นอน Git ไม่มีการขยายเส้นทางที่นี่ดังนั้นคุณไม่สามารถใช้~หากไม่มี kludge ที่น่าเกลียด หรือคุณสามารถข้ามไฟล์กำหนดค่าและกำหนดเส้นทางผ่านตัวแปรสภาพแวดล้อมGIT_SSL_CAINFOแทน

GIT_CURL_VERBOSE=1การแก้ไขปัญหานี้ชุด เส้นทางของไฟล์ CA ที่ใช้งาน Git จะปรากฏในบรรทัดที่ขึ้นต้นด้วย "CAfile:" ในเอาต์พุต


12
สำหรับฉันนี่คือคำตอบที่ดีที่สุด: มันใช้งานได้กับยูนิกซ์ (NetBSD จริง ๆ ) มันมีผลกับ git เท่านั้นและไม่ใช่สิ่งอื่นในระบบและไม่จำเป็นต้องเข้าถึง root / ผู้ดูแลระบบ ขอบคุณ!
Eric

1
สมบูรณ์แบบใครสามารถทำได้ดีกว่า ฉันได้เปลี่ยนรุ่นเก่า/etc/ssl/certs/ca-certificates.crtของฉันเป็น Ubuntu 8.04 LTS ด้วยไฟล์นี้และมันใช้งานได้อย่างน่าอัศจรรย์!
Michael-O

1
@Eric ขอบคุณที่พูดถึง NetBSD เพราะมันหมายถึงฉันพบคำตอบนี้ NetBSD ค่อนข้างแปลก ฉันติดตั้งแพคเกจ OpenSSL แต่แม้จะไม่ได้รับ certs คุณเพียงไดเรกทอรีตัวยึด
atomicules

+200 ยอดเยี่ยมยิ่งขึ้นมันยังทำงานบนกล่อง Ubuntu ของฉันด้วย ไม่จำเป็นต้องปิดการใช้งานการตรวจสอบใบรับรองในคอมไพล์เพียงทำการแก้ไขด่วนนี้
โคลินดีเบนเน็ตต์

11
คำตอบที่ยอดเยี่ยมคุณสามารถข้ามการแก้ไขไฟล์ ~ / .gitconfig ด้วยคำสั่งต่อไปนี้:git config --global http.sslCAinfo "$HOME/certs/cacert.pem"
Aron Ahmadia

41

โปรดทราบว่าสำหรับฉันที่จะทำงานนี้ (ติดตั้ง RVM บน CentOS 5.6) ฉันต้องทำงานต่อไปนี้:

export GIT_SSL_NO_VERIFY=true

และหลังจากนั้นขั้นตอนการติดตั้งมาตรฐานสำหรับการม้วนตัวติดตั้ง RVM ไปสู่ ​​bash ทำงานได้ดี :)


13
ผลเช่นเดียวกับการตั้งค่า git --global http.sslverify false
Dyno Fu

20
นี่คืออันตรายมาก! จุดทั้งหมดของการตรวจสอบใบรับรอง SSL คือการปกป้องรหัสของคุณจากการถูกดัดแปลงเมื่อคุณส่งผ่าน HTTPS! การปิดใช้งานหมายความว่าคนที่เป็นอันตรายสามารถแทรกช่องโหว่และสิ่งที่น่ารังเกียจอื่น ๆ ลงในรหัสของคุณเมื่อคุณกดและดึงข้อมูล!

หากฉันตั้งค่า http.sslVerify เป็นเท็จการเชื่อมต่อจะปลอดภัยหรือไม่ และเป็นเส้นทางที่ดีในการใช้งานอย่างไร ในระหว่างที่เรากำลังใช้ไฟร์วอลล์
pfsense

@Ravi การเชื่อมต่อจะใช้งานได้ในทางเทคนิคใช่ แต่มันไม่ใช่ความคิดที่ดีจริงๆ หากทั้งต้นกำเนิดคอมไพล์และเครื่องโลคอลของคุณนั้นอยู่ภายในและภายใต้การควบคุมขององค์กรของคุณก็อาจจะผ่านได้แต่ตามความคิดเห็นของผู้ใช้ 456814 การปิดใช้งานการตรวจสอบจะทำให้คุณถูกโจมตีด้วย MITM
Doktor J

40

ทางออกที่ง่ายมาก: แทนที่ https: // ด้วย git: //

ใช้ git: //the.repository แทนhttps: //the.repositoryและจะใช้งานได้

ฉันมีปัญหานี้กับ Windows ด้วย TortoiseGit และสิ่งนี้แก้ไขได้


ผมคิดว่างานนี้เพราะมันไม่ได้ตรวจสอบ SSL git://สำหรับ ตามที่ระบุไว้ในคำตอบข้างต้นการปิดใช้งานการตรวจสอบ SSL เป็นความเสี่ยงด้านความปลอดภัย
danijar

5
@danijar สาเหตุที่ทำให้งานนี้เกิดขึ้นเพราะไม่ได้ใช้ SSLเลย git://โปรโตคอลใช้ SSH ซึ่งใช้ประชาชน SSH และคู่คีย์ส่วนตัวสำหรับการตรวจสอบและการเข้ารหัสแทนใบรับรอง SSL

11
@Cupcake git://ไม่ได้ใช้ SSH ดูโปรโตคอล SSHและGit พิธีสาร
nyuszika7h

@ nyuszika7h โอ้คุณพูดถูก ฉันให้ได้รับgit://สับสนกับgit@github.com:user/project.git, ซึ่งเป็นไวยากรณ์ SCP-ish

31

ในฐานะที่เป็นคำตอบที่นิยมมากที่สุด (โดย Alexey Vishentsev) มี:

ปัญหาคือคุณไม่มีใบรับรองผู้ออกใบรับรองใด ๆ ติดตั้งอยู่ในระบบของคุณ และไฟล์เหล่านี้ไม่สามารถติดตั้งได้ด้วย setup.exe ของ cygwin

อย่างไรก็ตามการยืนยันครั้งสุดท้ายนั้นเป็นเท็จ (ตอนนี้หรือตอนนี้ฉันไม่รู้)

สิ่งที่คุณต้องทำคือไปที่การตั้งค่า cygwin และรวมถึงแพคเกจ 'ใบรับรอง ca' (มันอยู่ภายใต้สุทธิ) นี้ได้เคล็ดลับสำหรับฉัน.


1
Cygwin แสดงให้เห็นข้อผิดพลาดของคอมไพล์ในขณะที่การติดตั้งแพคเกจCAfile: /etc/ssl/ca-bundle.crt Cygwin CA-ใบรับรอง /usr/ssl/certs/ca-bundle.crtดังนั้นต้องแก้ไข~/.gitconfigเพื่อระบุตำแหน่ง: [http]แล้วsslCAinfo = /usr/ssl/certs/ca-bundle.crt
maxpolk

@ maxpolk: ฉันจะทำให้การเชื่อมโยง แต่ผลที่ได้คือเหมือนกัน นี่เป็นข้อผิดพลาดอย่างชัดเจนใน cygwin git คุณได้พิจารณาเพิ่มตั๋วหรือไม่? sudo ln -s /usr/ssl/certs/ca-bundle.crt /etc/ssl/
dirkjot

ณ วันนี้ 2013/05/23, Cygwin คอมไพล์ทำงานได้ดีกว่า https: ถ้าคุณยังเกิดขึ้นจะมี / อย่าลืมติดตั้ง ca-certificatesCygwin
bobbogo

ฉันมาที่นี่จาก คำถามนี้ซึ่งระบุว่าสามารถหาคำตอบได้ที่นี่ อย่างไรก็ตามทั้งคำตอบที่เชื่อมโยงหรือคำตอบนี้ไม่ได้ผลสำหรับฉัน TortoiseSVN ส่งสัญญาณออกไปเรื่อย ๆerror: SSL certificate problem, verify that the CA cert is OK.
OR Mapper

เราจะติดตั้งไฟล์การติดตั้ง cygwin จากตัวจัดการแพ็คเกจที่ไหน? ใบรับรอง ca จำเป็นต้องอยู่ในโฟลเดอร์ bin ของ Git หรือไม่?
221b

16

ฉันรู้ว่าคำถามดั้งเดิมแสดงรายการ Cygwin แต่นี่เป็นวิธีแก้ปัญหาสำหรับ CentOS:

curl http://curl.haxx.se/ca/cacert.pem -o /etc/pki/tls/certs/ca-bundle.crt

ที่มา: http://eric.lubow.org/2011/security/fixing-centos-root-certificate-authority-issues/


มันใช้งานได้ดีสำหรับฉัน คุณควรทำการสำรองข้อมูลต้นฉบับไว้ก่อนตามที่ OP แนะนำ ดูเหมือนว่าจะเกิดขึ้นเมื่อ Github ต่ออายุใบรับรองของพวกเขาหากคุณอยู่ในระบบที่มีรุ่นเก่ากว่า
Evan Donovan

บน CentOS 5 ฉันแก้ไขโดยyum update opensslซึ่งยังอัปเดต ca-bundle
raarts

หากคุณจะทำตามตัวเลือกนี้คุณควรตรวจสอบแฮช SHA-256 ของไฟล์ก่อนที่จะใช้ คุณสามารถรับsha256sum สำหรับไฟล์ปัจจุบันด้วยวิธีอื่นที่ไม่ใช่ curl ที่คุณตั้งค่า (เช่นเบราว์เซอร์บนเครื่องอื่นที่ติดตั้งไว้อย่างปลอดภัยแล้ว) จากนั้นเปรียบเทียบกับผลลัพธ์ของsha256sum /etc/pki/tls/certs/ca-bundle.crtเพื่อให้แน่ใจว่าคุณได้ถูกต้อง ไฟล์.
kbolino

16

หากต้องการโคลนบนหน้าต่างขณะตั้งค่า SSL ให้ตรวจสอบเป็นเท็จ:

    git -c http.sslVerify=false clone http://example.com/e.git

หากคุณต้องการโคลนโดยไม่รบกวนการตั้งค่าทั่วโลกของคุณ


14

บน CentOS 5.x การyum update opensslอัปเดตแพคเกจ openssl อย่างง่ายซึ่งอัปเดตca-bundle.crtไฟล์ระบบและแก้ไขปัญหาให้ฉัน

สิ่งนี้อาจเป็นจริงสำหรับการแจกแจงอื่น ๆ


ยัม! สิ่งนี้ใช้ได้สำหรับฉันสำหรับการติดตั้งเก่า (4.1.2) ของ Red Hat linux ขอบคุณ!
Josh

13

หากสิ่งที่คุณต้องการเพียงแค่ใช้ไคลเอนต์ Cygwin กับ github.com มีวิธีที่ง่ายกว่ามากโดยไม่ต้องวุ่นวายกับการดาวน์โหลดแยกคลายแปลงแยกไฟล์ใบรับรอง ดำเนินการดังนี้ (ฉันสมมติว่า Windows XP ใช้ Cygwin และ Firefox)

  1. ใน Firefox ไปที่หน้า github (ใด ๆ )
  2. คลิกที่ไอคอน github บนแถบที่อยู่เพื่อแสดงใบรับรอง
  3. คลิกผ่าน "ข้อมูลเพิ่มเติม" -> "ใบรับรองการแสดงผล" -> "รายละเอียด" และเลือกแต่ละโหนดในลำดับชั้นที่ขึ้นต้นด้วยหนึ่งบนสุด สำหรับแต่ละรายการให้คลิกที่ "ส่งออก" และเลือกรูปแบบ PEM:
    • GTECyberTrustGlobalRoot.pem
    • DigiCertHighAssuranceEVRootCA.pem
    • DigiCertHighAssuranceEVCA-1.pem
    • github.com.pem
  4. บันทึกไฟล์ดังกล่าวข้างต้นในไดรฟ์ในเครื่องของคุณเปลี่ยนนามสกุลเป็น. pem และย้ายไปที่ / usr / ssl / certs ในการติดตั้ง Cygwin ของคุณ (Windows: c: \ cygwin \ ssl \ certs)
  5. (ไม่บังคับ) เรียกใช้ c_reshash จาก bash

แค่นั้นแหละ.

แน่นอนว่านี่จะติดตั้งใบรับรองลำดับชั้นเดียวเท่านั้นซึ่งเป็นสิ่งที่คุณต้องการสำหรับ GitHub แน่นอนคุณสามารถใช้วิธีนี้กับเว็บไซต์อื่น ๆ โดยไม่จำเป็นต้องติดตั้ง 200 certs ของเว็บไซต์ที่คุณไม่เชื่อถือ (จำเป็น)


8

หากคุณใช้ Mac OS X คุณสามารถติดตั้ง ca-cert-bundle ผ่านhomebrew:

$ brew install curl-ca-bundle
$ git config --system http.sslcainfo /usr/local/share/ca-bundle.crt

สูตรติดตั้งกำใบรับรองส่วนแบ่งของคุณผ่านทาง:

share.install 'ca-bundle.crt'

shareวิธีเป็นเพียงนามแฝงไปยัง/usr/local/shareและขด-CA-มัดMozillaให้บริการโดย มันคือสิ่งที่คุณเห็นว่ามีการอ้างอิงในปัญหามากมาย หวังว่าสิ่งนี้จะช่วยได้เนื่องจากมันไม่ตรงไปตรงมามากเกี่ยวกับวิธีการเข้าถึงบน Mac OS X brew install curlจะไม่ทำให้คุณได้รับประโยชน์มากเนื่องจากเป็นถังเท่านั้นและจะไม่เชื่อมโยง (การทำงานwhich curlจะส่งออกเสมอ/usr/bin/curlซึ่งเป็นค่าเริ่มต้น OS) โพสต์นี้อาจมีค่าโพสต์นี้ยังอาจจะมีค่าบางอย่าง

แน่นอนคุณจะต้องปิดการใช้งาน SSL ก่อนที่จะติดตั้งhomebrewเนื่องจากเป็น repo คอมไพล์ ทำตามที่ curl บอกเมื่อเกิดข้อผิดพลาดระหว่างการตรวจสอบ SSL และ:

$ echo insecure >> ~/.curlrc

เมื่อคุณได้รับการhomebrewติดตั้งพร้อมกับcurl-ca-bundleลบ.curlrcและลองโคลน repo ออกบน GitHub ตรวจสอบให้แน่ใจว่าไม่มีข้อผิดพลาดและคุณจะไปดี

หมายเหตุ:หากคุณใช้วิธีนี้.curlrcโปรดลบออกจากระบบของคุณทันทีที่คุณทำการทดสอบ ไฟล์นี้อาจทำให้เกิดปัญหาที่สำคัญดังนั้นใช้มันเพื่อวัตถุประสงค์ชั่วคราวและด้วยความระมัดระวัง brew doctorจะบ่นในกรณีที่คุณลืมที่จะลบออกจากระบบของคุณ)

บันทึก:หากคุณอัปเดตเวอร์ชัน git ของคุณคุณจะต้องเรียกใช้คำสั่งนี้อีกครั้งเนื่องจากการตั้งค่าระบบของคุณจะถูกลบออก

ดังนั้นหลังจากทำงาน:

$ brew update
$ brew upgrade

หากคุณได้รับ git เวอร์ชันใหม่ให้ทำการรันใหม่อีกครั้ง:

$ git config --system http.sslcainfo /usr/local/share/ca-bundle.crt

และคุณจะพร้อมทุกอย่าง

สุดท้ายถ้าคุณมี git เวอร์ชันใหม่ให้รัน:

$ git config -l --system

ควรให้ข้อผิดพลาดตามบรรทัดของ

fatal: unable to read config file '/usr/local/Cellar/git/1.8.2.2/etc/gitconfig'

นั่นคือเคล็ดลับของคุณที่คุณต้องบอกคอมไพล์ว่า Mozilla ca-bundle อยู่ที่ไหน

UPDATE:

.curlrcอาจจะใช่หรือไม่ใช่การแก้ไขปัญหาของคุณ ไม่ว่าในกรณีใดเพียงแค่ติดตั้ง Mozilla ca-bundle บนเครื่องของคุณไม่ว่าคุณจะต้องดาวน์โหลดด้วยตนเองหรือไม่ก็ตาม นั่นคือสิ่งที่สำคัญที่นี่ เมื่อคุณได้รับ ca-bundle คุณก็พร้อมที่จะไป เพียงแค่เรียกใช้คำสั่ง git config แล้วชี้ไปที่ g-bundle

UPDATE

ฉันเพิ่งจะเพิ่ม:

export CURL_CA_BUNDLE=/usr/local/share/ca-bundle.crtของฉันไฟล์จุดตั้งแต่ฉันใช้.zshenv ตัวเลือกการทำงานสำหรับกรณีส่วนใหญ่ แต่เมื่อกดปุ่ม GitHub ผ่าน SSL ( ตัวอย่าง) ผมยังวิ่งเข้าไปในปัญหาใบรับรอง @Maverick ชี้ให้เห็นถึงสิ่งนี้ในความคิดเห็นของเขา แต่ในกรณีที่มีคนพลาดหรือคิดว่าพวกเขาไม่จำเป็นต้องส่งออกตัวแปรสภาพแวดล้อมนี้นอกเหนือไปจากการเรียกใช้คำสั่ง ขอขอบคุณและหวังว่าสิ่งนี้จะช่วยได้zshgit configrvm get stablegit config --system....

UPDATE

ดูเหมือนว่าขด-CA-มัดถูกลบออกเมื่อเร็ว ๆ นี้จาก homebrew มีเป็นข้อเสนอแนะที่นี่

คุณจะต้องวางไฟล์ลงใน:

$(brew --prefix)/etc/openssl/certs


1
นอกจากนี้คุณยังสามารถลองต่อไปนี้: export CURL_CA_BUNDLE=/usr/local/share/ca-bundle.crt
ไม่ฝักใฝ่ฝ่ายใด

สวัสดีฉันมีปัญหาที่คล้ายกัน ( stackoverflow.com/questions/20939105/… ) และปัญหาเดียวกันปรากฏขึ้นเมื่อฉันพยายามติดตั้ง home-brew ในกรณีนี้ฉันควรทำอย่างไร การพิมพ์ "git config --system http.sslcainfo /usr/local/share/ca-bundle.crt" ในคอนโซลของฉันกลับมา "ข้อผิดพลาด: ไม่สามารถล็อคไฟล์กำหนดค่า /Applications/Xcode.app/Contents/Developer/usr/etc/ gitconfig: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว " ขอขอบคุณสำหรับความช่วยเหลือของคุณ!
Mathieu

@Mathieu มันค่อนข้างแปลก ดูเหมือนว่าระบบของคุณกำลังชี้ไปที่เวอร์ชันของคอมไพล์ที่สัมพันธ์กับ XCode อะไรคือผลลัพธ์ของการทำงาน 'ซึ่ง git' จาก terminal ของคุณ?
A-Dubb


5

ฉันแก้ไขปัญหานี้โดยใช้apt-cyg (ตัวติดตั้งที่ยอดเยี่ยมคล้ายกับ apt-get) เพื่อดาวน์โหลดca-certificate (รวมถึง Git และอีกมากมาย):

apt-cyg install ca-certificates

หมายเหตุ : ควรติดตั้ง apt-cyg ก่อน คุณสามารถทำได้จากบรรทัดคำสั่งของ Windows:

cd c:\cygwin
setup.exe -q -P wget,tar,qawk,bzip2,subversion,vim

ปิด Windows cmd และเปิด Cygwin Bash:

wget rawgit.com/transcode-open/apt-cyg/master/apt-cyg
install apt-cyg /bin

สิ่งนี้ไม่ได้ผลสำหรับฉัน - ฉันยังคงได้รับข้อผิดพลาดเดียวกัน
holdenlee

4

บน Pi rasbery ฉันมี

pi @ raspbmc: ~ $ git clone http: //github.com/andreafabrizi/Dropbox-Uploader .git การโคลนนิ่งเป็นข้อผิดพลาด 'Dropbox-Uploader' ... : มีปัญหากับใบรับรอง SSL CA (เส้นทางสิทธิการเข้าถึง?) ในขณะที่เข้าถึง http: // github.com/andreafabrizi/Dropbox-Uploader.git/info/refs ร้ายแรง: คำขอ HTTP ล้มเหลว

ดังนั้น id

sudo apt-get install ca-certificates

แล้วก็

git clone http://github.com/andreafabrizi/Dropbox-Uploader.git  

ทำงาน



4

ฉันพบปัญหาเดียวกันนี้กับ Solaris Express 11 ฉันต้องใช้เวลาสักครู่ แต่ฉันก็สามารถหาที่วางใบรับรองที่ต้องการได้ ตาม /etc/openssl/openssl.cnf พา ธ สำหรับใบรับรองคือ / etc / openssl / certs ฉันวางใบรับรองที่สร้างโดยใช้คำแนะนำข้างต้นจาก Alexey

คุณสามารถตรวจสอบว่าสิ่งต่าง ๆ กำลังทำงานโดยใช้ openssl บน commandline:

openssl s_client -connect github.com:443

3

ลองใช้ไฟล์. netrc ซึ่งจะตรวจสอบสิทธิ์ผ่าน https สร้างการเรียกใช้ไฟล์.netrcในโฮมไดเร็กตอรี่ของคุณแล้ววางลงใน:

machine github.com login myusername password mypass

ดูโพสต์นี้สำหรับข้อมูลเพิ่มเติม:

https://plus.google.com/u/0/104462765626035447305/posts/WbwD4zcm2fj


นี่เป็นปัญหาการตรวจสอบใบรับรองไม่ใช่ปัญหาการรับรองความถูกต้อง - ระบบปฏิบัติการบางระบบ (รวมถึงระบบปฏิบัติการที่ทำงานด้วย OP) ไม่มีใบรับรองใหม่ของ CA ที่ออก GitHub รวมอยู่ในรายการหุ้น
ชาร์ลส์ดัฟฟี่

3

ปรับปรุงโซลูชันของ RouMao โดยปิดใช้งานการตรวจสอบ GIT / curl ssl ชั่วคราวใน Windows cmd:

set GIT_SSL_NO_VERIFY=true
git config --global http.proxy http://<your-proxy>:443

สิ่งที่ดีเกี่ยวกับการแก้ปัญหานี้คือมันจะมีผลเฉพาะในหน้าต่าง cmd ปัจจุบัน


3
นี่คืออันตรายมาก! จุดทั้งหมดของการตรวจสอบใบรับรอง SSL คือการปกป้องรหัสของคุณจากการถูกดัดแปลงเมื่อคุณส่งผ่าน HTTPS! การปิดใช้งานหมายความว่าคนที่เป็นอันตรายสามารถแทรกช่องโหว่และสิ่งที่น่ารังเกียจอื่น ๆ ลงในรหัสของคุณเมื่อคุณกดและดึงข้อมูล!

3

คุณตรวจสอบเวลาของคุณแล้วหรือยัง?

ฉันปฏิเสธที่จะทำให้การดำเนินการทาง git ไม่ปลอดภัยและหลังจากพยายามทุกอย่างที่คนพูดถึงที่นี่มันทำให้ฉันรู้สึกว่าสาเหตุหนึ่งที่ทำให้ใบรับรองไม่ผ่านการตรวจสอบคือวันที่ผิด (ทั้งวันหมดอายุใบรับรองหรือนาฬิกาท้องถิ่น )

คุณสามารถตรวจสอบสิ่งนี้ได้อย่างง่ายดายโดยการพิมพ์dateเทอร์มินัล ในกรณีของฉัน (ราสเบอร์รี่ Pi ใหม่) นาฬิกาท้องถิ่นถูกตั้งค่าเป็น 1970 ดังนั้นง่าย ๆntpdate -u 0.ubuntu.pool.ntp.orgแก้ไขทุกอย่าง สำหรับ rPi ฉันขอแนะนำให้คุณใส่สคริปต์ต่อไปนี้ในงาน cron รายวัน (พูด/etc/cron.daily/ntpdate):

#!/bin/sh
/usr/sbin/ntpdate -u 0.ubuntu.pool.ntp.org 1> /dev/null 2>&1

3

สร้างโทเค็นการเข้าถึงจาก Github และบันทึกเนื่องจากจะไม่ปรากฏขึ้นอีกครั้ง

git -c http.sslVerify=false clone https://<username>:<token>@github.com/repo.git

หรือ,

git config --global http.sslVerify false
git clone https://github.com/repo.git

2

ฉันพบปัญหาเดียวกันในการกำหนดค่า Git บนแพลตฟอร์มการพัฒนาความร่วมมือที่ฉันต้องจัดการ

เพื่อแก้ปัญหา:

  • ฉันได้อัปเดต Curl รุ่นที่ติดตั้งบนเซิร์ฟเวอร์แล้ว ดาวน์โหลดเวอร์ชันล่าสุดบนหน้าดาวน์โหลดเว็บไซต์ของ curlและทำตามขั้นตอนการติดตั้งขั้นตอนการติดตั้ง curl

  • รับใบรับรองของหน่วยงานที่มอบใบรับรองสำหรับเซิร์ฟเวอร์

  • เพิ่มใบรับรองนี้ไปยังไฟล์ CAcert ที่ใช้โดย curl /etc/pki/tls/certs/ca-bundle.crtบนเซิร์ฟเวอร์ของฉันจะอยู่ใน

  • กำหนดค่า git เพื่อใช้ไฟล์ใบรับรองนี้โดยแก้ไขไฟล์. gitconfig และตั้งค่าพา ธ sslcainfo sslcainfo= /etc/pki/tls/certs/ca-bundle.crt

  • บนเครื่องไคลเอ็นต์คุณต้องรับใบรับรองและกำหนดค่าไฟล์. gitconfig ด้วย

ฉันหวังว่านี่จะช่วยให้คุณบางคน


1

ฉันลองทุกอย่างในที่สุดฉันก็ดูในไฟล์ hosts และมีรายการแบบสุ่มสำหรับ github การลบนามแฝงช่วยแก้ไขปัญหาได้

% systemroot% \ system32 \ Drivers \ etc \ เจ้าภาพ


1

ฉันเพียงแค่ปิดการใช้งานการรับรองความถูกต้องของใบรับรอง SSL และใช้การเข้าสู่ระบบรหัสผ่านชื่อผู้ใช้อย่างง่ายป้อนคำอธิบายรูปภาพที่นี่


0

ฉันต้องการใบรับรองเพียงเพื่อ Cygwin และ git ดังนั้นฉันจึงได้ทำสิ่งที่ @esquifit โพสต์ อย่างไรก็ตามฉันต้องเรียกใช้ขั้นตอนที่ 5 ด้วยตนเอง c_rehash ไม่สามารถใช้ได้ในระบบของฉัน ฉันทำตามคำแนะนำนี้: การติดตั้งใบรับรอง CA ในกรอบงาน OpenSSLแทน


0

ฉันต้องการสองสิ่ง:

  1. ไปที่การตั้งค่า cygwin และรวมแพ็คเกจ ' ca-certificate ' (อยู่ภายใต้ Net) (ตามที่ระบุไว้ที่อื่น)

  2. บอก git ว่าจะหาใบรับรองที่ติดตั้งได้จากที่ใด:

    GIT_SSL_CAINFO = / usr / ssl / certs / ca-bundle.crt GIT_CURL_VERBOSE = 1 git ...

    (ไม่จำเป็นต้องใช้ตัวเลือกอย่างละเอียด)

    หรือจัดเก็บตัวเลือกอย่างถาวร:

    git config global http.sslCAinfo /usr/ssl/certs/ca-bundle.crt

    คอมไพล์ ...


-2

ฉันมีปัญหาเดียวกัน การอิมพอร์ตหรือคำสั่งใบรับรองเพื่อยกเลิกการตั้งค่าการตรวจสอบ SSL ไม่ทำงาน มันกลายเป็นรหัสผ่านที่หมดอายุสำหรับเครือข่ายพร็อกซี มีรายการของการกำหนดค่าพร็อกซี ในไฟล์. gitconfig แสดงอยู่ในโปรไฟล์ผู้ใช้ windows ของฉัน ฉันเพิ่งลบรายการทั้งหมดและมันเริ่มทำงานอีกครั้ง


-2

สำหรับระบบ Mac OSX 10.5 ฉันสามารถทำให้มันใช้งานได้ด้วยวิธีการง่ายๆ ก่อนอื่นให้เรียกใช้ขั้นตอน GitHub และการทดสอบที่ใช้งานได้ดีสำหรับฉันแสดงว่าใบรับรองของฉันใช้ได้จริง ๆ https://help.github.com/articles/generating-ssh-keys

ssh -T git@github.com

จากนั้นในที่สุดฉันก็สังเกตเห็นอีกรูปแบบ URL สำหรับรีโมท ฉันลองคนอื่น ๆ ด้านบนและพวกเขาไม่ทำงาน http://git-scm.com/book/ch2-5.html

git@github.com:MyGithubUsername/MyRepoName.git

"git push myRemoteName" ง่าย ๆ ใช้งานได้ดีมาก!


-2

ฉันเพิ่ง (ก.ค. 2014) มีปัญหาที่คล้ายกันและพบใน OS X (10.9.4) ว่ามีใบรับรอง "DigiCert High Assurance EV Root CA" DigiCert สูงหมดอายุ (แม้ว่าฉันยังมีอีกหนึ่งยังไม่หมดอายุ)

  1. เปิดการเข้าถึง Keychain
  2. ค้นหาใบรับรองสำหรับ "DigiCert"
  3. ดูเมนู> แสดงใบรับรองที่หมดอายุ

ฉันพบใบรับรองสองฉบับที่ชื่อว่า "DigiCert High Assurance EV Root CA" ซึ่งหมดอายุหนึ่ง พ.ย. 2574 และใบรับรองหมดอายุในเดือนกรกฎาคม 2014 (ไม่กี่วันก่อนหน้านี้) การลบใบรับรองที่หมดอายุนั้นช่วยแก้ไขปัญหาให้ฉันได้

หวังว่านี่จะช่วยได้


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