ลูกค้าของฉันใช้ใบรับรองที่ลงชื่อด้วยตนเองเพื่อให้แอปพลิเคชันทำงาน เพื่อให้สามารถใช้งานได้ฉันต้องติดตั้งใบรับรองหลักที่ใช้ในการลงชื่อใบรับรอง
เป็นไปได้หรือไม่ที่จะกำหนดค่าใบรับรองหลักเพื่อให้ตรวจสอบได้เพียงหนึ่งโดเมนเท่านั้น
ลูกค้าของฉันใช้ใบรับรองที่ลงชื่อด้วยตนเองเพื่อให้แอปพลิเคชันทำงาน เพื่อให้สามารถใช้งานได้ฉันต้องติดตั้งใบรับรองหลักที่ใช้ในการลงชื่อใบรับรอง
เป็นไปได้หรือไม่ที่จะกำหนดค่าใบรับรองหลักเพื่อให้ตรวจสอบได้เพียงหนึ่งโดเมนเท่านั้น
คำตอบ:
ไม่โดยนัยในการเชื่อถือใบรับรอง CA ของลูกค้าคือความไว้วางใจในใบรับรองทุกฉบับที่ลงนามโดย CA นั้น
ฉันไม่รู้จักแอปพลิเคชัน / ไลบรารีใด ๆ ที่มีตัวเลือกง่าย ๆ ที่ช่วยให้คุณในฐานะผู้ใช้ปลายทางเพื่อเลือกว่าคุณจะไว้วางใจลูกค้าของคุณหรือใบรับรอง CA อื่น ๆ เท่านั้นสำหรับบางโดเมน (sub-) เช่นสำหรับ * example.com และ * .example.org และไม่มีอะไรอื่น
Mozilla มีข้อกังวลที่คล้ายคลึงกันเกี่ยวกับรัฐบาลที่ได้รับการสนับสนุนในปัจจุบัน CA เป็นจุดสนใจแบบเปิดและตัวอย่างเช่นChromeมีการตรวจสอบพิเศษสำหรับการเข้าถึงเว็บไซต์ของ Google ซึ่งเป็นวิธีโกงใบรับรอง * .google.com และการประนีประนอมของ CA Diginotar กลายเป็นสาธารณะ .
แต่แม้ว่าคุณจะไม่เชื่อถือ CA คุณยังสามารถนำเข้า / เชื่อถือใบรับรองเซิร์ฟเวอร์เฉพาะที่ลงนามโดย CA นั้นซึ่งจะป้องกันการเตือน SSL สำหรับชื่อโฮสต์ในใบรับรองนั้น ซึ่งควรทำให้แอปพลิเคชันของคุณทำงานได้โดยไม่มีข้อผิดพลาดหรือข้อร้องเรียน
ตัวเลือกที่ใช้งานไม่ได้ของมาตรฐาน X.509v3 PKI คือส่วนขยายชื่อข้อ จำกัดซึ่งอนุญาตให้ใบรับรอง CA มีรายการบัญชีขาวและบัญชีดำของรูปแบบชื่อโดเมนที่ได้รับอนุญาตให้ออกใบรับรอง
คุณอาจโชคดีและลูกค้าของคุณได้ควบคุมตัวเองเมื่อพวกเขาตั้งค่าโครงสร้างพื้นฐาน PKI และรวมถึงข้อ จำกัด ของชื่อนั้นในใบรับรอง CA ของพวกเขา จากนั้นคุณสามารถนำเข้าใบรับรอง CA ของพวกเขาโดยตรงและรู้ว่ามันสามารถตรวจสอบชื่อโดเมนที่ จำกัด เท่านั้น
example.com
หรือ*.ad.example.com
ถูกต้อง CA ภายในของคุณยังสามารถออกใบรับรองเพื่อ *.example.bank
ให้มีการโจมตีคนกลางที่ดีและสอดแนมข้อมูลรับรองธนาคารออนไลน์ของคุณ
@CryptoGuy มีคำตอบที่ดีงามที่นี่ แต่ฉันต้องการที่จะขยาย
ในการถอดความ:
คุณสามารถ จำกัด CA บุคคลที่สามเพื่อเชื่อถือใบรับรอง (จาก CA นั้น) ที่ออกให้กับรายชื่อที่คุณต้องการ แม้ว่า CA บุคคลที่สามไม่มีส่วนขยาย Name Constraints แต่ก็สามารถนำไปใช้ได้โดยใช้เซิร์ฟเวอร์ CA ภายในของคุณเองผ่านการรับรองข้าม เคล็ดลับคือคุณลงชื่อ CA บุคคลที่สามโดยใช้ CA ภายในของคุณ
leaf SSL cert -> cross-certificate -> ใบรับรอง CA ของคุณ -> ใบรับรองรูทภายในของคุณ
และนี่คือวิธีที่คุณทำงาน (ใช้ OpenSSL บรรทัดคำสั่ง CA)
สร้าง CA ง่าย ๆ
openssl req -new -x509 -days 3650 -newkey rsa:2048 -sha256 -out root-ca.crt -keyout root-ca.key -subj "/CN=My Root CA"
คุณสามารถข้ามการสร้าง CA ระดับกลางได้
สร้างคำขอ CA ระดับกลางด้วยข้อ จำกัด ของชื่อ
openssl req -new -days 3650 -newkey rsa:2048 -out domain-ca.req -sha256 -keyout domain-ca.key -config ossl_domain_com.cfg
ด้วยสิ่งนี้ในossl_domain_com.cfg
ไฟล์:
[ req ]
prompt=no
distinguished_name=req_distinguished_name
req_extensions=domain_ca
[ req_distinguished_name ]
CN=somedomain.com trust CA
[ domain_ca ]
basicConstraints=critical,CA:true,pathlen:1
nameConstraints=critical,permitted;DNS:.somedomain.com
จากนั้นลงชื่อที่ CA โดเมนระดับกลางด้วย CA ของคุณ
openssl x509 -req -in domain-ca.req -CA root-ca.crt -CAkey root-ca.key -sha256 -set_serial 1 -out domain-ca.crt -extensions domain_ca -extfile ossl_domain_com.cfg
หากคุณข้ามการสร้างสื่อกลางให้ใช้รูท CA ของคุณเพื่อลงชื่อ
ตอนนี้ลงนาม CA เดิมของโดเมนภายใต้สิทธิ์ของคุณอีกครั้งโดยใช้ใบรับรอง คุณสามารถเพิ่มส่วนขยาย CA ได้ที่นี่
openssl x509 -in third_party_ca.crt -CA domain-ca.crt -CAkey domain-ca.key -set_serial 47 -sha256 -extensions domain_ca -extfile ossl_domain_com.cfg -out domain-cross-ca.crt
คุณอาจต้องใช้-x509-to-req
อาร์กิวเมนต์เพื่อสร้างคำขอซึ่งคุณจะต้องลงชื่อในลักษณะเดียวกันกับสื่อกลางด้านบน
ตอนนี้เพิ่มรูท CA, CA ระดับกลางของคุณและ domain-cross-ca ไปยังฐานข้อมูลที่เชื่อถือได้ของเบราว์เซอร์ของคุณ
basicConstraints
บรรทัดในไฟล์กำหนดค่าดูเหมือนจะทำให้ส่วนขยายของข้อ จำกัด นั้นรวมอยู่ในใบรับรองสองครั้งซึ่งทำให้ Firefox ปฏิเสธใบรับรองด้วยข้อความแสดงข้อผิดพลาดแบบเข้ารหัส ฉันคิดว่ามันสามารถลบออกได้อย่างปลอดภัย
error with certificate to be certified - should be self signed
ฉันได้รับข้อผิดพลาดในขั้นตอนสุดท้าย: มันหมายถึงอะไรและจะแก้ปัญหาอย่างไร pastebin.ubuntu.com/p/QHhpQh2N6J