ท้ายที่สุด ฉันกำลังพยายามกำหนดค่าเซิร์ฟเวอร์ ocsp บน Ubuntu 20.4 แต่ฉันยังไม่สามารถยืนยันใบรับรองใด ๆ ที่ออกโดย CA ระดับกลางของฉันได้
ฉันได้กำหนดค่า ca-root ชื่อ ca-root.mydomain.org ฉันยังได้กำหนดค่า ca ระดับกลางที่เรียกว่า ca-sub.mydomain.org สุดท้าย มีเซิร์ฟเวอร์ ocsp ในอนาคตของฉัน ocsp-server.mydomain.org
ก่อนอื่น ฉันสร้างใบรับรองที่ลงนามด้วยตนเอง ca_root_cert_fileจากนั้นฉันให้ ca-root ลงนามใบรับรองสำหรับ ca-sub.mydomain.org, ca_sub_cert_file ฉันสร้างไฟล์ใบรับรอง pem chain "sub-chain.pem" ประกอบด้วยใบรับรองย่อย ca ตามด้วยใบรับรอง ca-root ตามลำดับ
ต่อไป ฉันจะคัดลอกทั้ง ca_root_cert_file และ ca_sub_cert_file ไปยังไดเร็กทอรี "$CA_ROOTS_HASHES_DIR" และคัดลอกใบรับรองหลักทั้งหมดใน /etc/ssl/ใบรับรอง
ที่นั่นเช่นกัน ฉันเรียกใช้ยูทิลิตี้ openssl c_rehash -v "$CA_ROOTS_HASHES_DIR"
. ฉันคาดว่าตอนนี้ฉันสามารถใช้สิ่งนี้เป็นอาร์กิวเมนต์สำหรับ -CApaths
พารามิเตอร์ของ ยืนยัน openssl
.
ต่อไป ฉันมี ca-sub ลงชื่อใบรับรองสำหรับ ocsp-server.mydomain.org ฉันสร้างไฟล์ cert chain pem "ocsp_signer_chain.pem" ประกอบด้วย ocsp-server cert, sub-ca cert, แล้วก็ ca-root cert ตามลำดับ ฉันไม่คาดว่าจะต้องการ ocsp_signer_chain.pem นี้ แต่ฉันมีแล้ว
ฉันสามารถใช้การยืนยัน openssl เพื่อยืนยัน ca_sub_cert_file:
`openssl ตรวจสอบ -verbose -show_chain -CApath "$CA_ROOTS_HASHES_DIR" "$ca_sub_cert_file"`
ตกลง
โซ่:
ความลึก=0: C = สหรัฐอเมริกา, ST = แคลิฟอร์เนีย, L = แปซิฟิกา, O = Mydomain, CN = ca-sub.mydomain.org (ไม่น่าเชื่อถือ)
ความลึก=1: C = สหรัฐอเมริกา, ST = แคลิฟอร์เนีย, L = แปซิฟิกา, O = Mydomain, CN = ca-root.mydomain.org, emailAddress = [email protected]
แต่ฉันไม่สามารถยืนยัน ocsp-server_cert_file ได้ ฉันมักจะได้รับ ข้อผิดพลาด 20 ที่การค้นหาเชิงลึก 0: ไม่สามารถรับใบรับรองผู้ออกในท้องถิ่น
.
ฉันได้ลองใช้ CAfile กับ sub-chain.pem กับ ocsp_signer_chain.pem กับ -CApath "$CA_ROOTS_HASHES_DIR"
.
ฉันได้ลองทั้งแบบมีและไม่มี - ไม่น่าเชื่อถือ "$ca_sub_cert_file"
openssl ตรวจสอบ -verbose -show_chain -CApath "$CA_ROOTS_HASHES_DIR" - ไม่น่าเชื่อถือ "$ca_sub_cert_file" "$ocsp-server_cert_file"`
C = US, ST = California, L = Pacifica, O = Mydomain, CN = ocsp-signer.mydomain.org
ข้อผิดพลาด 20 ที่การค้นหาเชิงลึก 0: ไม่สามารถรับใบรับรองผู้ออกในท้องถิ่น
ข้อผิดพลาด ocsp.mydomain.org_ocspserver_ocsp-signing.crt: การยืนยันล้มเหลว
ผมทำอะไรผิดหรือเปล่า? ฉันค้นหามาหลายวันแล้ว แต่คำตอบที่ฉันพบทั้งหมดจบลงด้วยการใช้ CApath หรือ CAfile
ฉันประหลาดใจที่แม้ในขณะที่ยืนยัน ca_sub_cert_file, openssl รายงาน "ca-sub.mydomain.org (ไม่น่าเชื่อถือ)" ฉันคาดว่าการมีใบรับรองใน CA_ROOTS_HASHES_DIR จะทำให้เชื่อถือได้ :/
ไฟล์ ca-conf ของฉันทำงานสำหรับการเซ็นชื่อด้วยตนเองและการเซ็นชื่อ ca-sub ซึ่งทำให้ฉันคิดว่านั่นไม่ใช่ปัญหา conf อย่างไรก็ตาม ฉันได้เรียนรู้แล้วว่าการสร้างไฟล์ conf ที่ผิดเป็นเรื่องง่ายโดยไม่มีการเตือนจาก openssl
นี่คือไฟล์ conf ของฉันที่ GITHUB
นี่คือส่วน ca_extensions ของทั้งสองไฟล์ ca.conf
[ ca_extensions ]
ข้อจำกัดพื้นฐาน = วิกฤต CA:จริง
keyUsage = digitalSignature, keyEncipherment, keyCertSign, cRLSign
subjectKeyIdentifier = แฮช
AuthorityKeyIdentifier = keyid:always, ผู้ออก
ExtendedKeyUsage = serverAuth
crlDistributionPoints = URI:http://ca-root.mydomain.org/crl/mydomain.crl.pem
AuthorityInfoAccess = OCSP;URI:http://ca-root.mydomain.org:8083