ทำไมฉันไม่สามารถตรวจสอบห่วงโซ่ใบรับรองนี้ได้


16

ฉันมีใบรับรองสามใบในสายโซ่:

  • root.pem
  • intermediate.pem
  • john.pem

เมื่อฉันตรวจสอบพวกเขาโดยใช้openssl x509 -in [filename] -text -nooutพวกเขาดูดี root.pem ดูเหมือนว่ามันจะลงนามด้วยตนเอง (ผู้ออก == เรื่อง) และหัวเรื่องของแต่ละใบรับรองคือผู้ออกของคนต่อไปตามที่คาดไว้

และแน่นอนฉันสามารถตรวจสอบห่วงโซ่ถึงใบรับรองกลาง:

$ openssl verify -CAfile root.pem root.pem
root.pem: OK
$ openssl verify -CAfile root.pem intermediate.pem
intermediate.pem: OK

อย่างไรก็ตาม john.pem ล้มเหลว:

$ openssl verify -CAfile root.pem -CAfile intermediate.pem john.pem
john.pem: C = CL, [...redacted data...]
error 2 at 1 depth lookup:unable to get issuer certificate

เพื่อความรู้ที่ดีที่สุดของฉันซึ่งหมายความว่า openssl ไม่สามารถหาผู้ออกสำหรับสื่อกลางได้ ซึ่งไม่สมเหตุสมผลเนื่องจาก root.pem เป็นผู้ออกสื่อกลาง

ฉันกำลังคิดถึงอะไร


แก้ไข: ฉันเคยโพสต์คำตอบบอก root.pem ที่และ intermediate.pem -CAfileควรจะตัดแบ่งในไฟล์เดียวแล้วหนึ่งควรใช้ไฟล์นี้เป็นพารามิเตอร์สำหรับ นี้เป็นธรรมเพราะการลงทุนโดยปริยาย intermediate.pem เป็นโยฮันเน Pilleชี้ให้เห็น อ่านลิงค์ที่เขาโพสต์ในคำตอบที่ถูกลบของฉัน: https://mail.python.org/pipermail/cryptography-dev/2016-August/000676.html


โปรดลบคำตอบของคุณมันเป็นข้อมูลที่ผิดที่เป็นอันตราย!
Johannes Pille

1
@JohannesPille เรียบร้อยขอบคุณสำหรับข้อมูล
Jong Bor

ความรุ่งโรจน์สำหรับการทำมันและการตอบสนองอย่างรวดเร็ว
Johannes Pille

คำตอบ:


14

คุณไม่จำเป็นต้องรวมใบรับรองทั้งสองไว้ด้วยกันเพื่อยืนยัน

หากคุณมีใบรับรองสามข้อต่อไปนี้:

  • root.pem - เก็บใบรับรองที่ลงนามด้วยตนเอง
  • middle.pem - เก็บใบรับรองที่ลงนามโดย root.pem
  • john.pem - เก็บใบรับรองที่ลงนามโดย middle.pem

และคุณไว้วางใจเพียง root.pem จากนั้นคุณจะตรวจสอบjohn.pemด้วยคำสั่งต่อไปนี้:

openssl verify -CAfile root.pem -untrusted intermediate.pem john.pem

คุณมีคนกลางหลายคนคุณทำได้แค่โซ่ -untrusted intermediate2.pem -untrusted intermediate3.pem ...


นี้. เป็นคำตอบที่ถูกต้องเท่านั้น
Johannes Pille

ฉันคิดว่าถ้าฉันมีทั้งใบรับรอง Intermediate และ Root CA ในบันเดิลopensslจะเลือกใบรับรองเหล่านั้นและตรวจสอบใบรับรอง มีเหตุผลที่จะเกิดขึ้นหรือไม่ เช่นคนที่ลงนามใบรับรองผู้ใช้ไม่ได้เซ็นชื่อกับ Intermediate แต่เป็น root หรืออะไรบางอย่าง?
FilBot3

ประโยคสุดท้ายของคำตอบนี้ผิด หากคุณมีคนกลางจำนวนมากคุณต้องทำการต่อเอกสารเหล่านั้นเป็นไฟล์ระดับกลางหนึ่งไฟล์จากนั้นใช้untrustedแฟล็กหนึ่งครั้ง การใช้การตั้งค่าสถานะที่ไม่น่าเชื่อถือหลายครั้งไม่ทำงาน
AjaxLeung

1
@AjaxLeung - ทั้งสอง-untrustedตัวเลือก (ในลำดับใดก็ได้) หรือ-untrustedตัวเลือกเดียวที่ชี้ไปที่ชุดของตัวกลาง (ตัดแบ่งตามลำดับใด ๆ ) นี่คือกับ OpenSSL รุ่น 1.1.1c บน Ubuntu
garethTheRed

ใช่ฉันเข้าใจผิด ฉันคิดว่าฉันไม่ได้ใช้ไฟล์ที่ถูกต้องในขณะที่ฉันเขียนความคิดเห็น
AjaxLeung

3

สิ่งที่ @antiduh พูดว่าใช้ได้กับกรณีใบรับรองระดับกลางเดียวสำหรับฉันเท่านั้น โดยการเพิ่มมากกว่าหนึ่ง-untrusted intermediate.pemคำสั่งดูเหมือนจะไม่ทำงาน ไม่แน่ใจว่าเกี่ยวข้องกับรุ่น openssl ที่เจาะจงหรือไม่

ตามเอกสาร openssl: [ https://linux.die.net/man/1/verify]

ไฟล์ที่ได้รับความไว้วางใจ

ไฟล์ของใบรับรองที่ไม่น่าเชื่อถือ ไฟล์ควรมีใบรับรองหลายใบ

ในกรณีของฉันฉันมีห่วงโซ่เช่น: root.pem -> intermediate1.pem -> intermediate2.pem -> john.pem

โดย cat middle1.pem & middle2.pem เป็นไฟล์ระดับกลาง chain.pem ไฟล์เดียวจากนั้นเรียกใช้openssl verify -CAfile root.pem -untrusted intermediate-chain.pem john.pemงานได้สำหรับฉัน

ดูเหมือนว่าในส่วนขยาย ca คุณต้องตั้งค่าbasicConstraints = CA:trueมิฉะนั้นฉันยังพบ openssl ตรวจสอบข้อผิดพลาดรายงาน

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