เป็นไปได้หรือไม่ที่จะ จำกัด การใช้ใบรับรองรูทไปยังโดเมน


28

ลูกค้าของฉันใช้ใบรับรองที่ลงชื่อด้วยตนเองเพื่อให้แอปพลิเคชันทำงาน เพื่อให้สามารถใช้งานได้ฉันต้องติดตั้งใบรับรองหลักที่ใช้ในการลงชื่อใบรับรอง

เป็นไปได้หรือไม่ที่จะกำหนดค่าใบรับรองหลักเพื่อให้ตรวจสอบได้เพียงหนึ่งโดเมนเท่านั้น


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

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

คุณมีเซิร์ฟเวอร์ CA ภายในหรือไม่
Crypt32

1
CA สามารถ จำกัด ตัวเองให้กับบางโดเมนที่มีข้อ จำกัด ของชื่อแต่การใช้ข้อ จำกัด ย้อนหลังกับ CA ของคนอื่นเป็นเรื่องที่แตกต่างกัน
Matt Nordhoff

3
ไม่มีความแตกต่าง คุณสามารถใช้การ จำกัด ชื่อกับ CA บุคคลที่สามได้เช่นกัน คุณเพียงแค่ลงนามในใบรับรอง CA ของบุคคลที่สามโดยใช้ CA ส่วนตัวของคุณและเผยแพร่ cross-certificate ที่สร้างขึ้น ในกรณีนี้เชนต่างประเทศจะจบลงที่เชนส่วนตัวของคุณผ่านการ จำกัด ข้ามใบรับรอง
Crypt32

คำตอบ:


24

ตามกฎของหัวแม่มือ:

ไม่โดยนัยในการเชื่อถือใบรับรอง 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 ของพวกเขาโดยตรงและรู้ว่ามันสามารถตรวจสอบชื่อโดเมนที่ จำกัด เท่านั้น


2
@CryptoGuy: CA ภายในยังสามารถออกใบรับรองสำหรับโดเมนภายนอกได้ เมื่อคุณเชื่อถือ CA ภายในของคุณจะไม่มีข้อ จำกัด เช่นนั้นเฉพาะใบรับรองสำหรับโดเมนของคุณเอง (Active Directory หรือ DNS) example.comหรือ*.ad.example.com ถูกต้อง CA ภายในของคุณยังสามารถออกใบรับรองเพื่อ *.example.bankให้มีการโจมตีคนกลางที่ดีและสอดแนมข้อมูลรับรองธนาคารออนไลน์ของคุณ
HBruijn

1
"ทุกอย่าง" ไม่ถูกต้องสมบูรณ์ มีรายการต่างๆเช่นรายการเพิกถอนใบรับรอง แต่นั่นไม่ได้เปลี่ยนบรรทัดล่าง
Ben Voigt

1
ขออภัยคุณไม่ถูกต้องอีกครั้ง คุณสามารถ จำกัด CA บุคคลที่สามเพื่อเชื่อถือใบรับรอง (จาก CA นั้น) ที่ออกให้กับรายชื่อที่คุณต้องการ เกี่ยวกับ CA ภายในของคุณฉันถือว่าความไว้วางใจอย่างไม่ต้องสงสัย หากคุณไม่ไว้วางใจ CA ของคุณเองแสดงว่ามีบางอย่างผิดปกติกับไอทีของคุณ ฉันต้องการจะบอกว่าการมี CA ส่วนตัว OP สามารถสร้างความเชื่อถือบางส่วนให้กับ CA ของบุคคลที่สาม (โดย จำกัด ชื่อที่พวกเขาเชื่อถือ)
Crypt32

3
ไปที่โพสต์ที่แก้ไขแล้วของคุณ: แม้ว่า CA บุคคลที่สามไม่มีส่วนขยาย Name Constraints คุณสามารถนำไปใช้โดยใช้เซิร์ฟเวอร์ CA ภายในของคุณเองผ่านการรับรองข้าม ในกรณีนี้เชนใบรับรองจะเป็นดังนี้: leaf SSL cert -> cross-certificate -> ใบรับรอง CA ของคุณ -> ใบรับรองรูทภายในของคุณ เคล็ดลับคือคุณลงชื่อ CA บุคคลที่สามโดยใช้ CA ภายในของคุณ และใบรับรองไขว้จะมีข้อ จำกัด ที่จำเป็นทั้งหมด
Crypt32

1
CryptoGuy กล่าวว่าสิ่งนี้เป็นไปได้ แต่การค้นหารายละเอียดการใช้งานเป็นสิ่งที่ท้าทาย วิธีการเกี่ยวกับคำตอบที่อธิบายถึงวิธีการนี้สามารถทำได้? และอาจเป็นการสนทนาที่แพลตฟอร์มรองรับชื่อข้อ จำกัด
jorfus

17

@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 ไปยังฐานข้อมูลที่เชื่อถือได้ของเบราว์เซอร์ของคุณ


2
MacOS ไม่รองรับ nameConstraints เพียง FIY สำหรับทุกคนที่ทำงานในชื่อ CA ที่ จำกัด ภายใน security.stackexchange.com/questions/95600/… archive.is/6Clgb
jorfus

ถาม: สถานะของโซลูชันนี้คืออะไร ปัจจุบันระบบใดบ้างที่ใช้งานได้ในปัจจุบัน (2018) // ฉันต้องการสิ่งนี้ทุกครั้งที่ฉันถูกบังคับให้ติดตั้งใบรับรองของ บริษัท อื่นเอง และทุกครั้งที่คิดถึงสำนักงานไปรษณีย์ฮ่องกงหรือไซแมนเทค // ฉันคิดว่าฉันอาจไม่สนใจว่าจะไม่ทำการลดทอนลงเรื่อย ๆ ตราบใดที่พวกเขาไม่ได้ปรับให้กว้างขึ้นโดยไม่ตั้งใจ
Krazy Glew

@ KrazyGlew ฉันมีไฟล์แบตช์ที่ฉันใช้สำหรับสิ่งนี้และฉันยังคงใช้มันเป็นประจำ บางครั้งฉันต้องออกใบรับรองกลางอีกครั้งเนื่องจากหมดอายุหรือหมุนเวียนดังนั้นจึงเป็นคู่มือเล็กน้อย แต่ก็ไม่ได้มีปัญหา ฉันทำงานเป็นครั้งคราวในไซต์ที่มีการจัดการสิทธิ์ซึ่งเบราว์เซอร์ของฉันไม่สามารถเชื่อถือได้เนื่องจากการใช้งานผู้ให้บริการระดับกลางที่แตกต่างกันหรือชื่อโดเมนพิเศษที่เพิ่มเข้ามาซึ่งฉันไม่เชื่อถือ
davenpcj

2
ฉันเพิ่งใช้สำเร็จแล้วขอบคุณ มันใช้งานได้ดีโดยไม่ต้องมีใบรับรองระดับกลางมีประโยชน์ในการใช้หรือไม่ นอกจากนี้basicConstraintsบรรทัดในไฟล์กำหนดค่าดูเหมือนจะทำให้ส่วนขยายของข้อ จำกัด นั้นรวมอยู่ในใบรับรองสองครั้งซึ่งทำให้ Firefox ปฏิเสธใบรับรองด้วยข้อความแสดงข้อผิดพลาดแบบเข้ารหัส ฉันคิดว่ามันสามารถลบออกได้อย่างปลอดภัย
wrtlprnft

error with certificate to be certified - should be self signedฉันได้รับข้อผิดพลาดในขั้นตอนสุดท้าย: มันหมายถึงอะไรและจะแก้ปัญหาอย่างไร pastebin.ubuntu.com/p/QHhpQh2N6J
mymedia
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.