ฉันสร้างห่วงโซ่ใบรับรอง PEM (CA, ระดับกลางและลีฟ) โดยใช้ pyopenssl
และฉันต้องการยืนยันว่าฉันกำหนดทุกอย่างถูกต้องแล้ว
นี่คือขั้นตอนที่ฉันดำเนินการ:
- ฉันสร้างใบรับรอง PEM สามใบ ลงนาม CA ด้วยตนเอง และกำหนดข้อจำกัดพื้นฐาน
crypto.X509Extension(b'basicConstraints', False, b'CA:TRUE')
ตามคำถามนี้ - ฉันคัดลอก CA และใบรับรองระดับกลางไปที่
/usr/local/share/ca-certificates
(เป็นไฟล์ crt) และรันsudo update-ca-cert
- ฉันได้ตั้งค่าเซิร์ฟเวอร์แบบง่ายตามตัวอย่าง OpenSSL นี้
- ฉันลองใช้เซิร์ฟเวอร์ด้วยใบรับรอง CA และดำเนินการ
openssl s_client -connect localhost:4433 -CApath /etc/ssl/certs
- ใช้งานได้ดี ได้รับVerify return code: 0 (ok)
- ทำสิ่งเดียวกัน แต่คราวนี้เซิร์ฟเวอร์ใช้ใบรับรองระดับกลาง - เยี่ยมมาก
Verify return code: 0 (ok)
- ทำสิ่งเดียวกัน แต่คราวนี้เซิร์ฟเวอร์ใช้ใบรับรองลีฟ - คราวนี้ฉันได้
Verify return code: 24 (invalid CA certificate)
นอกจากนี้ ฉันได้ลองตรวจสอบใบรับรองและได้รับสิ่งต่อไปนี้:
$ openssl verify 1-ca.pem
1-ca.pem: OK
$ openssl verify 2-intermediate.pem
2-intermediate.pem: OK
$ openssl verify 3-leaf.pem
C = NL, ST = Amsterdam, L = Zaandam, O = FakeDigiCert, OU = FakeFake, CN = www.fakedigicert.nl
error 24 at 1 depth lookup: invalid CA certificate
error 3-leaf.pem: verification failed
เหตุใดใบรับรอง CA จึงไม่ถูกต้องทันทีเมื่อใบรับรองของเซิร์ฟเวอร์อยู่ห่างจาก CA มากกว่าหนึ่งขั้นตอน