การเพิ่มใบรับรอง SSL สำหรับ Github เท่านั้น (ไม่ใช่ใบรับรองทั้งหมดจากแพ็คเกจใบรับรอง CA)


13

ฉันได้รับข้อผิดพลาดต่อไปนี้เมื่อเข้าถึง Github ผ่าน HTTPS:

error: server certificate verification failed. 
CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none

นี้เป็นเพราะผมไม่ได้มีใบรับรองใด ๆ /etc/ssl/certs/ใน ฉันรู้วิธีแก้ไขปัญหานี้ ฉันสามารถติดตั้งแพ็คเกจได้ca-certificatesจากที่เก็บ Debian อย่างไรก็ตามปัญหาคือว่าสิ่งนี้จะติดตั้งใบรับรองทั้งหมด (หลักพัน) ซึ่งฉันไม่จำเป็นต้องยอมรับ / เชื่อถือ

ฉันจะติดตั้งใบรับรองสำหรับ Github เท่านั้นได้อย่างไร

Subproblem / Subquestion

ในเครื่องอื่นที่ca-certificatesติดตั้งแพคเกจไว้แล้วและคอมไพล์ใช้งานได้ฉันพบว่าใบรับรองบางอย่างใน/etc/ssl/certs/หนึ่งใบรับรองต่อหนึ่งไฟล์และอื่น ๆ นั้นเป็นใบรับรองจำนวนมากในหนึ่งไฟล์ ไฟล์เฉพาะที่มีใบรับรอง Github /etc/ssl/certs/ca-certificates.crtมีมากกว่า 150 ใบรับรองอื่น ๆ :

$ grep 'BEGIN CERTIFICATE' /etc/ssl/certs/ca-certificates.crt | wc -l
159

ฉันจะหาใบรับรองใดจากหนึ่งใน 159 ที่เป็นที่ฉันต้องการ (นอกเหนือจากกำลังเดรัจฉาน - การแบ่งไฟล์เป็นครึ่ง ๆ หนึ่งและตรวจสอบทั้งสองครึ่งแล้วทำซ้ำwhile n > 1)


คุณพยายามทำอะไรให้สำเร็จ การติดต่อ GitHub โดยทางโปรแกรม
Nate W.

คุณได้ลองดาวน์โหลดซอร์สแพ็กเกจแล้วแตกเฉพาะใบรับรองที่คุณต้องการหรือไม่?
jayhendren

คุณใช้อะไรในการเข้าถึง GitHub? เครื่องมือบรรทัดคำสั่ง? เบราว์เซอร์?
lk-

คำตอบ:


13

ในการเข้าถึง Github ของคุณคุณต้องทำผ่าน ssh ดังนั้นคุณต้องเพิ่มคีย์สาธารณะ ssh ของคุณเพื่อ gitHub หลังจากนั้นคุณสามารถเข้าถึง github ผ่าน ssh เช่น:

git init git@github.com:yourname/yourrepo.git

ดูเพิ่มเติมที่: Github: สร้างคีย์ ssh , WikiHow

[แก้ไข # 1]

โดยไม่ต้องตรวจสอบใบรับรอง:

GIT_SSL_NO_VERIFY=true git clone https://github.com/p/repo.git

หรือรับรองความถูกต้อง

GIT_SSL_NO_VERIFY=true git clone https://user@pass:github.com/p/repo.git

สำหรับฉันมันยังไม่ชัดเจนว่าคุณต้องการอะไรเพราะคุณรู้ว่าการติดตั้งใบรับรอง CA จะช่วยแก้ปัญหาได้

[แก้ไข # 2]

ตกลงคำถามอื่น ๆ คือ

ทำอย่างไรถึงจะมีใบรับรองที่จำเป็นสำหรับการเข้าถึง github.com ผ่าน https

  1. เปิดเบราว์เซอร์และนำทางของคุณเพื่อhttps://github.com/ โหวตในชื่อสีเขียวบนซ้ายจากhttps://และ Klick Certificatesบน บนDetailsแท็บคุณจะเห็นห่วงโซ่ใบรับรองซึ่งก็คือ:

    DigiCert ...
      DigiCert ...
       github.com ...
    
  2. ส่งออกใบรับรอง DigiCert แต่ละไฟล์ไปยังไฟล์

  3. คัดลอกไฟล์ไปที่ /etc/ssl/certs/
  4. เรียกใช้c_rehashcat ที่ใบรับรองทั้งหมดไปca-certificates.crt
  5. คุณทำเสร็จแล้ว

ดังที่ฉันกล่าวว่าฉันไม่ได้เป็นเพื่อนของการกระทำดังกล่าวเพราะ Github สามารถเปลี่ยน CA ได้ทุกที่ทุกเวลาดังนั้นมันจะส่งผลให้มีการทำงานเพิ่มเติมเสมอ


1
ขอบคุณสำหรับคำแนะนำ แต่ผมต้องการที่จะเข้าถึงได้ผ่านทางgithub https
Martin Vegter

1

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

ต้องบอกว่าฉันคิดว่าสิ่งที่คุณกำลังมองหาคือวิธีการติดตั้งใบรับรอง root / CA ใน / etc / ssl / certs โดยสรุปแล้วมันไม่เพียงพอที่จะเพียงแค่ถ่ายโอนไฟล์ที่เข้ารหัส PEM ไปยัง / etc / ssl / certs - คุณต้องคำนวณแฮชของใบรับรองดังกล่าวและสร้าง symlink ใน / etc / ssl / certs ไปยังใบรับรองนั้น ไฟล์. ชื่อของ symlink จะต้องมีการต่อท้ายแฮชด้วย. 0 หรือหากมีการชนกันของแฮช, .1 และอื่น ๆ

นี่คือรายละเอียดการเขียนรวมถึงสคริปต์ตัวอย่างที่คุณสามารถใช้เพื่อทำให้กระบวนการอัตโนมัติ: http://wiki.openwrt.org/doc/howto/wget-ssl-certs#adding.root.certificates

หวังว่านี่คือสิ่งที่คุณกำลังมองหา แต่อย่างที่ฉันพูดไปก่อนหน้านี้คีย์ SSH อาจเป็นคำตอบที่ "ดีกว่า" :)


c_rehashกำลังทำสิ่งที่คุณอธิบาย ดูc_rehashหน้าคน BTW: ไม่จำเป็นต้องคำนวณแฮช การกำหนด certs เป็น ca-certificate.crt นั้นเพียงพอแล้วเนื่องจากgitอ่านได้เฉพาะไฟล์นี้ นอกจากนี้ลิงก์ยังอธิบายวิธีรับใบรับรองด้วย openssl ด้วยตนเอง นี่เป็นสิ่งที่น่าสงสัยมากและกระตุ้นให้ชายคนหนึ่งโจมตีกลาง ฉันจะไม่แนะนำที่นี่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.