วิธีการติดตั้งใบรับรองสำหรับบรรทัดคำสั่ง


72

ดังนั้นในโรงเรียนเราจำเป็นต้องติดตั้งใบรับรองเพื่อเข้าถึงเว็บไซต์ https ใน firefox ฉันสามารถนำเข้าใบรับรอง อย่างไรก็ตามฉันไม่สามารถทำได้ด้วยบรรทัดคำสั่ง ตัวอย่างเช่นgit pushฉันได้รับ:

fatal: unable to access 'https://github.com/user/repo': server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none

ฉันจะนำเข้าใบรับรองเพื่อนำออกได้อย่างไร การนำเข้าจะต้องสามารถตรวจสอบได้สำหรับฉัน นอกจากนี้ยังเป็น.cerไฟล์ดังนั้นคำตอบสำหรับ.crtจะไม่ทำงาน นอกจากนี้ฉันไม่ต้องการขั้นตอนในการตั้งค่าคอมไพล์ตามที่ฉันมีอยู่แล้ว ฉันต้องการทราบว่าเป็นไปได้ที่จะทำเช่นนั้น หรือฉันจะปิดการใช้งานการรับรองความถูกต้องด้วยgitคำสั่งทั้งหมดและทำให้ละเว้นใบรับรองเช่นคำตอบที่นี่ นอกจากนี้ฉันไม่ต้องการให้หน้าเว็บโหลดฉันได้ตั้ง firefox ให้ทำเช่นนั้น ฉันต้องการgit pushคำสั่งให้ออกมาตรฐานเช่น:

[master 630d087] message
 1 file changed, 93 insertions(+), 80 deletions(-)
 rewrite somefile (84%)
Counting objects: 9, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 978 bytes | 0 bytes/s, done.
Total 5 (delta 2), reused 0 (delta 0)
To https://github.com/User/Repo.git
   851ae39..630d087  master -> master

หมายเหตุ: git config --global http.sslverify falseผมพบมัน แต่ฉันต้องการเห็นคำตอบสำหรับทุกสิ่งไม่ใช่แค่แฮ็คคอมไพล์



@EricCarvalho .crtไม่มีครับสำหรับ ฉันต้องการ.cer
Universal ไฟฟ้า

คุณมีปัญหากับคำสั่ง git หรือสิ่งที่คุณต้องการจะทำอย่างไร? ส่ง Ping ให้ฉันด้วย @AB
AB

@AB ฉันต้องการให้ git ใช้ใบรับรองที่ทางโรงเรียนมอบให้เราแทนที่จะพยายามใช้ github cert หรือหากไม่ได้ผลก็อนุญาตให้ใบรับรองของโรงเรียนรับรองความถูกต้องให้ฉัน
Universal Electricity

โปรดทราบว่าส่วนขยาย. crt และ. cer นั้นใช้แทนกันได้เพียงเปลี่ยนนามสกุลไฟล์ซึ่งมีรูปแบบเดียวกัน
Mike

คำตอบ:


117

TL; DR

เพื่อให้ทุกอย่างใช้งานได้และไม่เพียง แต่เบราว์เซอร์ของคุณคุณต้องเพิ่มใบรับรอง CA นั้นในที่เก็บ CA ที่เชื่อถือได้ของระบบ

ในอูบุนตู:

  • ไปที่ / usr / local / share / ca-certificate /
  • สร้างโฟลเดอร์ใหม่เช่น "sudo mkdir school"
  • คัดลอกไฟล์. crt ไปยังโฟลเดอร์โรงเรียน
  • ตรวจสอบให้แน่ใจว่าการอนุญาตนั้นใช้ได้ (755 สำหรับโฟลเดอร์, 644 สำหรับไฟล์)
  • เรียกใช้ "sudo update-ca-certificate"

ทำไม

ให้ฉันอธิบายสิ่งที่เกิดขึ้นด้วยดังนั้นผู้โพสต์คนอื่น ๆ จึงเห็นว่าทำไมพวกเขาไม่ต้องการใบรับรองใด ๆ เพื่อใช้ Github ผ่าน HTTPS

สิ่งที่เกิดขึ้นคือโรงเรียนของคุณกำลังสกัดกั้นการสื่อสาร SSL ทั้งหมดซึ่งอาจเป็นไปเพื่อตรวจสอบพวกเขา

ในการทำเช่นนั้นสิ่งที่พวกเขาทำคือการโจมตี "คนที่อยู่ตรงกลาง" และเบราว์เซอร์ของคุณบ่นอย่างถูกต้องว่าเขาไม่สามารถตรวจสอบใบรับรองของ GitHub ได้ พร็อกซีโรงเรียนของคุณกำลังออกใบรับรอง github และมอบใบรับรองของตัวเองแทน

เมื่อเบราว์เซอร์ของคุณพยายามตรวจสอบใบรับรองที่โรงเรียนมอบให้กับ CA ที่ลงนามในหนังสือรับรองของ Github มันจะล้มเหลวอย่างถูกต้อง

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

เมื่อคุณเชื่อถือ CA โรงเรียนการตรวจสอบใบรับรอง GitHub ปลอมของคุณจะใช้งานได้เนื่องจากใบรับรอง Github ปลอมจะได้รับการตรวจสอบโดย CA ของโรงเรียน

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


นี่เป็นคำตอบเดียวกับไมค์ที่ไม่มี dpkg-reconfigure ที่ไม่ควรต้องการ สิ่งที่อาจเกิดขึ้นคือคอมไพล์หรือบรรทัดคำสั่งอื่นไม่ได้มาตรฐาน 100% เกี่ยวกับการตรวจสอบ SSL ของพวกเขา การใช้สิ่งที่คุณเรียกว่า "git hack" อาจจำเป็นเพื่อแก้ปัญหา "SSL hack" ที่โรงเรียนของคุณดำเนินการก่อน
Telegrapher

และโปรดทราบว่าคุณต้องมีสิทธิ์การใช้งานรูทเพื่อใช้งานคำสั่งนี้ดังนั้นคำสั่ง sudo จะต้องสำเร็จหรือคุณจะไม่สามารถอัปเดตผู้ออกใบรับรองของระบบ
Telegrapher

2
โปรดแก้ไขคำตอบของคุณเพื่อให้ข้อเท็จจริงเพิ่มเติม - อย่าแสดงความคิดเห็น
guntbert

1
/usr/local/share/ca-certificates/ผมเชื่อว่าควรจะเป็น ดูman update-ca-certificatesซึ่งพูดถึงเกี่ยวกับการมีรายการที่อนุญาตสำหรับ/usr/share/ca-certificates/แต่เกี่ยวกับวิธีการไว้วางใจทุกอย่างใน/usr/local/share/ca-certificates/ไดเรกทอรีโดยปริยาย
Ian Hickson

3
บน Ubuntu 16.04 หลังจากเพิ่ม CA ลงไป /usr/local/share/ca-certificatesฉันก็ต้องใช้sudo dpkg-reconfigure ca-certificatesมันเพื่อไปรับ CA
Matt L.

41

ca-certificatesแพคเกจมีคำแนะนำในที่README.Debian:

หากคุณต้องการติดตั้งผู้ออกใบรับรองในท้องถิ่นที่จะเชื่อถือได้โดยปริยายโปรดใส่ไฟล์ใบรับรองเป็นไฟล์เดียวลงท้ายด้วย.crtเข้ามาอีกครั้งวิ่ง/usr/local/share/ca-certificates/ update-ca-certificates

โปรดทราบว่ามันกล่าวถึงไดเรกทอรีที่แตกต่างจากคำตอบอื่น ๆ ที่นี่:

/usr/local/share/ca-certificates/

หลังจากคัดลอกไปที่/usr/local/share/ca-certificates/คุณสามารถอัปเดตสิทธิ์ของใบรับรองและเรียกใช้sudo update-ca-certificatesตามที่ระบุไว้ในคำตอบโทรเลข คุณจะเห็นในผลลัพธ์ที่เพิ่มใบรับรอง


4
สิ่งนี้ใช้ได้สำหรับฉันเช่นกันบน Ubuntu 16.04 เส้นทางในคำตอบที่ยอมรับนั้นใช้ไม่ได้สำหรับฉัน
Plazgoth

นี่จะต้องเป็นคำตอบที่ได้รับการยอมรับนี่เป็นวิธีแก้ปัญหาสำหรับเซิร์ฟเวอร์อูบุนตู 16.04 LTS
Lasitha Benaragama

15

นามสกุล. crt, .pem และ .cer สามารถใช้แทนกันได้เพียงเปลี่ยนนามสกุลไฟล์พวกเขามีรูปแบบเดียวกัน ลองสิ่งนี้:

$ sudo cp mycert.cer /usr/share/ca-certificates/mycert.pem
$ sudo dpkg-reconfigure ca-certificates
$ sudo update-ca-certificates
$ git config --global http.sslCAInfo /usr/share/ca-certificates/mycert.pem

แม้ว่ามันจะเป็นจริง แต่ก็ไม่ได้ช่วยอะไร แต่ในอนาคตอาจช่วยผู้คนได้
ไฟฟ้าสากล

ฉันเพิ่มอีกหนึ่งบรรทัดลองใช้เพื่อให้ git เชื่อถือใบรับรองของคุณโปรดทราบว่าฉันเปลี่ยน cer เป็น. pem ในสองใน 4 ขั้นตอนแทน. crt @ Unicorns Are Yummy Very Very
Mike

3
หากไฟล์. CER ของคุณเป็นแบบไบนารี่ (รูปแบบ DER) คุณจะไม่สามารถเปลี่ยนนามสกุลได้ ใช้openssl(1)เพื่อแปลงใบรับรองเป็นรูปแบบ PEM เรียกใช้:$ openssl -in mycert.cer -inform DER -out mycert.pem -outform PEM
ผู้ใช้ Arch

1
@Archuser บางทีคำสั่งที่ถูกต้องคือ:openssl x509 -inform DER -in certificate.cer -out certificate.pem
artificerpi

5

ฉันใช้การรวบรวมคำตอบก่อนหน้านี้:

sudo -i
echo | openssl s_client -showcerts -servername site.example.com -connect example.com:443 2>/dev/null | awk '/-----BEGIN CERTIFICATE-----/, /-----END CERTIFICATE-----/' >> /usr/local/share/ca-certificates/ca-certificates.crt 
update-ca-certificates

สามารถแก้ไขให้เป็นแบบหนึ่งซับได้

บ่อยครั้งทั้งสองsite.example.comและexample.comเป็นชื่อโฮสต์เดียวกัน


3

ฉันอ่านวิธีแก้ปัญหาทั้งหมดและแก้ไขอย่างนี้;

sudo openssl x509 -inform DER -in certificate.cer -out certificate.crt

sudo mv certificate.crt /usr/share/ca-certificate/

cd /usr/share/ca-certificate

sudo chmod 644 certificate.crt

sudo dpkg-reconfigure ca-certificates

sudo update-ca-certificates

1

ฉันมีปัญหาคล้ายกันซึ่งการติดตั้งใบรับรองใน Firefox และ Google Chrome ทำงานได้ แต่การอัปเดตในเทอร์มินัลsudo apt-get updateไม่ทำงานและให้ข้อผิดพลาด IP ต้องห้าม 403 ข้อ ฉันมีไฟล์ sample.cer ด้วย ดังนั้นโดยทั่วไปฉันต้องแปลงเป็น. crt ก่อน

sudo openssl x509 -inform DER -in sample.cer -out sample.crt

ในขณะที่ทำsudo dpkg-reconfigure ca-certificatesฉันไม่พบใบรับรองที่ต้องการ ปัญหากับฉันคือฉันกำลังคัดลอกใบรับรองในสถานที่ที่ไม่ถูกต้อง

แทนที่จะคัดลอกมาที่$/usr/share/ca-certificates ฉันกำลังคัดลอกที่$/usr/local/share/ca-certificates แต่โดยวางไว้ในที่ที่ถูกต้องแก้ปัญหาของฉัน แต่ฉันยังไม่สามารถอัปเดตแพ็คเกจหรือติดตั้งแพ็คเกจใหม่ได้

แก้ไขด่วน (สำหรับฉันใน):

การใช้ ftp แทน http

sudo sed -i s/http/ftp/ /etc/apt/sources.list && apt-get update

และเหนือคำสั่งทำงาน โปรดทำสำเนาไฟล์ source.list ก่อนทำการเปลี่ยนแปลง

หากมีสิ่งใดที่ไม่ชัดเจนหรือไม่เหมาะสมโปรดแก้ไขให้ถูกต้อง


0

ในการเข้าถึงเว็บไซต์ด้วยhttpsไม่ว่าคุณจะใช้เบราว์เซอร์ CLI หรือ GUI คุณไม่จำเป็นต้องมีใบรับรอง shool

ที่จะใช้gitผ่านทาง HTTP (s) คุณจำเป็นต้องลงทะเบียนคีย์สาธารณะในการตั้งค่าโปรไฟล์ของคุณบนGitHub

ข่าวสารเพิ่มเติมที่นี่ เปลี่ยนรายละเอียด GitHub ของคุณที่นี่


ลองสิ่งนี้:

sudo apt-get install w3m
w3m https://github.com/

... ทำงานโดยไม่มีใบรับรองเพิ่มเติม

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