เหตุใดจึงไม่ตรวจสอบใบรับรองที่ลงนามด้วยตนเองผ่านบันทึก DNS แทนที่จะเป็น letsencrypt


16

ฉันแค่สงสัย เราใช้ใบรับรอง SSL จำนวนมาก ทุกวันนี้เราเกือบจะใช้ letsencrypt (ขอบคุณ!) บรรทัดล่างสุดของใบรับรองเหล่านี้คือหลักฐานการเป็นเจ้าของชื่อโดเมนในใบรับรองนั้นมาจากอำนาจในการจัดการระเบียน DNS หรือเว็บไซต์ภายใต้โดเมนเหล่านี้ หลักฐาน DNS มาจากการเพิ่มคีย์ (ที่ได้รับจาก allowencrypt) เป็นระเบียน TXT ไปยัง DNS

ดังนั้นหากมีหลักฐานเพียงพอที่จะสามารถเปลี่ยนระเบียน DNS สำหรับโดเมนทำไมไม่ใช้ใบรับรองที่ลงชื่อด้วยตนเองด้วยลายนิ้วมือใน DNS

ฉันจะบอกว่าสิ่งนี้ให้ความเชื่อมั่นในปริมาณเท่ากันกับขั้นตอนการใช้ DNS ของ allowencrypt (และ CA อื่น ๆ ):

  1. สร้าง CA ที่เซ็นชื่อด้วยตนเอง (เพียงทำตามขั้นตอนของวิธีการต่างๆ)
  2. สร้างใบรับรองสำหรับบางโดเมน
  3. เซ็นชื่อใบรับรองจากขั้นตอนที่ 2 ด้วย CA จากขั้นตอนที่ 1 ตอนนี้คุณมีใบรับรองพื้นฐานที่ลงชื่อโดย CA ที่ไม่น่าเชื่อถือ
  4. เพิ่มระเบียน TXT (หรือเฉพาะ) ไปยัง DNS ของแต่ละโดเมนโดยระบุ: เราได้ลงนามใบรับรองของโดเมนนี้ด้วย CA นี้ ไลค์: 'CA = -fingerpint of CA-'
  5. เบราว์เซอร์ดาวน์โหลดใบรับรองและตรวจสอบโดยการเปรียบเทียบลายนิ้วมือของใบรับรอง CA / CA กับข้อมูลใน DNS สำหรับโดเมนที่กำหนด

สิ่งนี้จะทำให้สามารถสร้างใบรับรองที่ลงนามด้วยตนเองที่เชื่อถือได้โดยไม่มีการรบกวนจากบุคคลที่สามซึ่งมีระดับความน่าเชื่อถือเท่ากับใบรับรอง SSL พื้นฐานใด ๆ ตราบใดที่คุณสามารถเข้าถึง DNS ใบรับรองของคุณจะถูกต้อง เราสามารถเพิ่ม DNSSEC บางอย่างเช่นการเข้ารหัสทำแฮชออกจาก CA พร้อมกับบันทึก SOA เพื่อให้มั่นใจว่าความเชื่อถือจะหายไปจากการเปลี่ยนแปลงในระเบียน DNS

เคยมีการพิจารณาเรื่องนี้มาก่อนหรือไม่?

Jelmer


3
ที่เกี่ยวข้อง: tools.ietf.org/html/rfc6698
Håkan Lindqvist

ขอบคุณHåkan! จากการอัปเดตฉันพบคำว่า DANE สำหรับ RFC นี้ RFC รุ่นล่าสุด: tools.ietf.org/html/rfc7671 ดูเพิ่มเติมที่: en.wikipedia.org/wiki/… (ฉันจะอ่านในภายหลัง)
Jelmer Jellema

2
"ทำไมไม่" รวมอยู่ใน RFC Håkanที่เชื่อมโยง: หากไม่มี DNSSEC ความน่าเชื่อถือของรุ่นทั้งหมดจะถูกบุกรุกเนื่องจากช่องโหว่ที่เกิดขึ้นกับ DNS ควรสังเกตว่า DNSSEC ไม่ทำอะไรเลยเพื่อรักษาความปลอดภัยการรับส่งข้อมูลระหว่างไคลเอนต์และระบบเรียกซ้ำซึ่งยังคงอ่อนแอต่อมนุษย์ในการปลอมแปลงกลาง
Andrew B

แอนดรูว์ฉันเห็นปัญหาเกี่ยวกับ DNSSEC และ MIDM เมื่อ DNSSEC ไม่ได้ถูกบังคับสำหรับโดเมนและการบังคับสามารถทำได้ก็ต่อเมื่อการค้นหาแต่ละครั้งทำได้โดยการตรวจสอบเซิร์ฟเวอร์รูทสำหรับ tld ดังนั้นปัญหาคือเราต้องการอนุญาตให้ใช้ใบรับรอง DV บางรายการโดยให้เจ้าของระบุว่าเป็นความถูกต้อง แต่เราไม่สามารถเชื่อถือ DNS ได้เนื่องจากเป็นลักษณะแบบลำดับชั้น ความจริงที่ว่า DNS นั้นง่ายต่อการปลอมแปลงและการโจมตีแบบ MIDM ทำให้การรับรองจาก DV นั้นเป็นการตรวจสอบภายนอกของรายการโดเมน อืมฉันจะคอยคิด ...
Jelmer Jellema

คำตอบ:


18

โครงสร้างพื้นฐานขั้นพื้นฐานที่จะทำให้เรื่องนี้เป็นไปได้ที่มีอยู่และที่เรียกว่า DNS-based รับรองความถูกต้องของหน่วยงานที่มีชื่อ (DANE) และระบุไว้ในRFC6698 มันทำงานโดยใช้วิธีการTLSAบันทึกทรัพยากรที่ระบุใบรับรองหรือกุญแจสาธารณะของหน่วยงานปลายทางหรือหนึ่งใน CA ของมันในห่วงโซ่ (มีจริงสี่ประเภทที่แตกต่างกันดู RFC สำหรับรายละเอียด)

การรับเป็นบุตรบุญธรรม

อย่างไรก็ตาม DANE ยังไม่เห็นการยอมรับอย่างกว้างขวาง VeriSign ตรวจสอบการยอมรับ DNSSEC และ DANEและติดตามการเติบโตในช่วงเวลาหนึ่ง :

การปรับใช้ TLSA ทั่วโลกระหว่างวันที่ 17 มิถุนายน

สำหรับการเปรียบเทียบตาม VeriSign มีโซน DNS ประมาณ 2.7 ล้านโซนดังนั้นนั่นหมายความว่ามากกว่า 1% ของโซนทั้งหมดมี TLSA อย่างน้อยหนึ่งระเบียน

ฉันไม่สามารถให้คำตอบที่มีสิทธิ์ใด ๆ ทำไม DANE แต่นี่คือการคาดเดาของฉัน:

DANE ประสบปัญหาเดียวกันกับรายการเพิกถอนใบรับรอง (CRLs) และโพรโทคอลสถานะใบรับรองออนไลน์ (OCSP) ในการตรวจสอบความถูกต้องของใบรับรองที่นำเสนอต้องมีการติดต่อกับบุคคลที่สาม Hanno Böck ให้ภาพรวมที่ดีว่าทำไมเรื่องนี้เป็นปัญหาใหญ่ในทางปฏิบัติ มันทำให้เกิดปัญหากับสิ่งที่ต้องทำเมื่อคุณไม่สามารถเข้าถึงบุคคลที่สามได้ ผู้ขายเบราว์เซอร์เลือกที่จะใช้งานsoft-fail (หรือที่รู้จักกันว่าอนุญาต) ในกรณีนี้ซึ่งทำให้ทั้งหมดค่อนข้างไม่มีจุดหมายและในที่สุด Chrome ก็ตัดสินใจที่จะปิดการใช้งาน OCSP ในปี 2012

DNSSEC

DNS นั้นมีความพร้อมใช้งานที่ดีกว่าเซิร์ฟเวอร์ CRL และ OCSP ของ CAs แต่ก็ยังทำให้การตรวจสอบออฟไลน์เป็นไปไม่ได้ นอกจาก DANE ควรใช้ร่วมกับ DNSSEC เท่านั้น เมื่อ DNS ปกติทำงานผ่าน UDP ที่ไม่ผ่านการตรวจสอบสิทธิ์ก็มีแนวโน้มที่จะปลอมแปลงการโจมตี MITM และอื่น ๆ การใช้ DNSSEC นั้นดีกว่าการใช้ DANE มาก แต่ก็ยังห่างไกลจากการแพร่หลาย

และด้วย DNSSEC เราจึงพบกับปัญหา soft-fail อีกครั้ง ตามความรู้ของฉันไม่มีระบบปฏิบัติการเซิร์ฟเวอร์ / ไคลเอนต์ที่สำคัญให้ตัวแก้ไข DNSSEC การตรวจสอบตามค่าเริ่มต้น

จากนั้นยังมีปัญหาเรื่องการเพิกถอน DNSSEC ไม่มีกลไกการเพิกถอนและอาศัยคีย์อายุสั้นแทน

สนับสนุนซอฟต์แวร์

ซอฟต์แวร์ที่เข้าร่วมทั้งหมดต้องใช้การสนับสนุน DANE

ในทางทฤษฎีคุณอาจคิดว่านี่จะเป็นงานของ crypto library และผู้พัฒนาแอพพลิเคชั่นไม่ต้องทำอะไรมากมาย แต่ความจริงแล้วโดยทั่วไปแล้ว cryptographic libraries โดยทั่วไปจะให้บริการพื้นฐานและแอพพลิเคชั่นเท่านั้น (และน่าเสียดายที่มีหลายวิธีที่จะทำให้สิ่งผิดปกติ)

ฉันไม่ทราบว่าเว็บเซิร์ฟเวอร์หลักใด ๆ (เช่น Apache หรือ nginx) ตัวอย่างเช่นการนำ DANE มาใช้หรือมีแผนจะทำ เว็บเซิร์ฟเวอร์มีความสำคัญเป็นพิเศษที่นี่เพราะมีสิ่งต่างๆมากมายที่สร้างขึ้นบนเทคโนโลยีเว็บดังนั้นพวกเขาจึงมักจะเป็นคนแรกที่มีการนำสิ่งต่าง ๆ มาใช้

เมื่อเราดูการเปรียบเทียบ CRL, OCSP และ OCSP Stapling เราอาจสามารถสรุปได้ว่าเรื่องราวการรับเลี้ยงบุตรบุญธรรมของ DANE จะเป็นอย่างไร แอปพลิเคชั่นบางตัวเท่านั้นที่ใช้ OpenSSL, libnss, GnuTLS และอื่น ๆ รองรับคุณสมบัติเหล่านี้ ต้องใช้เวลาสักครู่สำหรับซอฟต์แวร์ที่สำคัญ ๆ เช่น Apache หรือ nginx เพื่อรองรับและกลับมาอ่านบทความของ Hanno Böckอีกครั้งพวกเขาเข้าใจผิดและการนำไปปฏิบัติมีข้อบกพร่อง โครงการซอฟต์แวร์สำคัญอื่น ๆ เช่น Postfix หรือ Dovecot ไม่รองรับ OCSPและมีฟังก์ชั่น CRL ที่ จำกัด โดยทั่วไปชี้ไปที่ไฟล์ในระบบไฟล์ (ซึ่งไม่จำเป็นต้องอ่านกฎเกณฑ์ซ้ำดังนั้นคุณจะต้องโหลดเซิร์ฟเวอร์ของคุณด้วยตนเองเป็นต้น) โปรดทราบว่านี่เป็นโครงการซึ่งมักใช้ TLS จากนั้นคุณสามารถเริ่มดูสิ่งต่าง ๆ โดยที่ TLS นั้นพบได้น้อยกว่ามากอย่างเช่น PostgreSQL / MySQL และบางทีพวกเขาก็เสนอ CRL ที่ดีที่สุด

ดังนั้นฉันจึงไม่แม้แต่เว็บเซิร์ฟเวอร์ที่ทันสมัยก็ใช้งานได้และซอฟต์แวร์อื่น ๆ ส่วนใหญ่ยังไม่ได้ใช้ OCSP และ CRL โชคดีกับแอปพลิเคชันระดับองค์กรหรืออุปกรณ์ 5 ปี

แอพพลิเคชั่นที่มีศักยภาพ

แล้วคุณจะใช้ DANE ได้ที่ไหน? ณ ตอนนี้ไม่ได้อยู่บนอินเทอร์เน็ตทั่วไป หากคุณควบคุมเซิร์ฟเวอร์และไคลเอนต์อาจเป็นตัวเลือก แต่ในกรณีนี้คุณมักจะหันไปใช้การตรึงคีย์สาธารณะ

ในพื้นที่จดหมาย DANE ได้รับแรงดึงบางอย่างเนื่องจาก SMTP ไม่มีการเข้ารหัสการส่งผ่านที่มีการรับรองความถูกต้องชนิดใดเป็นเวลานาน บางครั้งเซิร์ฟเวอร์ SMTP ใช้ TLS ระหว่างกัน แต่ไม่ได้ตรวจสอบว่าชื่อในใบรับรองตรงกันจริง ๆ ตอนนี้พวกเขาเริ่มตรวจสอบผ่าน DANE


6
ฉันคิดว่าประโยคสุดท้ายของคุณถูกตัดออกไป
8bittree

ขอบคุณเซบาสเตียนปฏิกิริยาของคุณมีประโยชน์มาก โปรดดูความคิดเห็นของฉันและแอนดรูภายใต้ OP
Jelmer Jellema

3
เหตุใดจึงจำเป็นสำหรับเว็บเซิร์ฟเวอร์เพื่อดำเนินการนี้ ฉันสามารถเพิ่มใบรับรองที่ลงชื่อด้วยตนเองในการกำหนดค่า apache และใส่ลายนิ้วมือใน DNS ด้วยตัวเองใช่ไหม
Jelmer Jellema

1
นอกจากนี้ยังมีปัญหาเรื่องประสิทธิภาพและความสามารถในการปรับขนาดได้กับ DNSSEC กับ DNS: DNS ธรรมดาสามารถใช้การตอบสนอง "กระป๋อง" แต่ DNSSEC จะต้องทำการเข้ารหัสลับสำหรับทุกคำขอและมีคำขอ DNS จำนวนมากที่บินไปมา เช่นเดียวกับจำนวนมากของการร้องขอ DNS
Joker_vD

4
@Joker_vD DNSSEC ลงชื่อข้อมูลไม่ใช่การรับส่งข้อมูล กล่าวคือในตอนท้ายที่มีสิทธิ์คุณสามารถลงนามในโซนของคุณและไม่มี "การเข้ารหัสลับ" เพิ่มเติมสำหรับอายุการใช้งานของลายเซ็น (หรือจนกว่าคุณจะเปลี่ยนข้อมูลโซน) มันอยู่ในฝั่ง validator (ฝั่งไคลเอ็นต์) ที่ต้องการ“ cryptodance” ต่อคำขอที่ไม่ได้ทำการร้องขอ ทั้งข้อมูลเพิ่มเติมและสถานะ DNSSEC เหมาะกับรูปแบบการแคชทั่วไปสำหรับ DNS
Håkan Lindqvist

5

ขั้นตอนการตรวจสอบใบรับรองประเภทต่างๆ

ด้วยใบรับรองที่ลงนามโดย CA ปกติจะมีการตรวจสอบใบรับรองหลายระดับ:

  • การตรวจสอบความถูกต้องของโดเมน (DV)
    ตรวจสอบความเป็นเจ้าของชื่อโดเมนเท่านั้นเฉพาะชื่อโดเมนที่แสดงเป็น "หัวเรื่อง" ในใบรับรอง
  • การตรวจสอบความถูกต้องขององค์กร (OV)
    ชื่อโดเมนและชื่อเจ้าของได้รับการตรวจสอบแล้วชื่อโดเมนและชื่อเจ้าของจะแสดงเป็น "หัวเรื่อง" ในใบรับรอง
  • Extended Validation (EV)
    การตรวจสอบอย่างเข้มงวดยิ่งขึ้นของนิติบุคคลเจ้าของชื่อโดเมนและชื่อเจ้าของแสดงเป็น "หัวเรื่อง" ในใบรับรองแถบสีเขียวที่มีชื่อเจ้าของ

กระบวนการที่คุณอธิบายและเสนอการแทนที่จะใช้กับระดับการตรวจสอบความถูกต้องของโดเมน (DV) ระดับต่ำสุดเท่านั้น

DV เป็นระดับที่การตรวจสอบค่อนข้างตรงไปตรงมาโดยอัตโนมัติเช่นสิ่งที่ LetsEncrypt ได้ทำไว้และให้ระดับความน่าเชื่อถือที่ใกล้เคียงกับที่ DNS สามารถให้ได้หากใช้เป็นแหล่งเดียวสำหรับจุดยึดที่เชื่อถือได้ (ความหมายของ UI อาจรับรอง เชื่อถือได้ แต่มีข้อมูลเพิ่มเติมที่ไม่ผ่านการตรวจสอบ)

การตรวจสอบความถูกต้องบน DNS ของรายการที่มีชื่อ (DANE)

DANEสร้างบน DNSSEC (เนื่องจากความถูกต้องของข้อมูล DNS เป็นสิ่งสำคัญ) เพื่อเผยแพร่ข้อมูลจุดยึดความไว้วางใจสำหรับไคลเอนต์ TLS ใน DNS

มันใช้TLSAประเภท RR และสามารถใช้เพื่อระบุใบรับรองหรือพับลิกคีย์ ( ตัวเลือก ) ของเอนทิตีปลายทางหรือ CA โดยมีหรือไม่ต้องมีการตรวจสอบความถูกต้องของใบรับรองห่วงโซ่ปกติเพื่อประสบความสำเร็จ ( การใช้ใบรับรอง ) และวิธีการรับรอง / คีย์ข้อมูลจะแสดงในเรคคอร์ด ( ประเภทการจับคู่ )

TLSAชื่อเจ้าของบันทึกมีคำนำหน้าซึ่งบ่งชี้ว่าพอร์ตและโปรโตคอล (เช่น_443._tcp) และ RData บ่งชี้cert usage, selectorและmatching typeโหมดนอกเหนือไปจากใบรับรอง / ข้อมูลที่สำคัญในการแข่งขัน ดูหัวข้อ 2.1 ของ RFC6698สำหรับข้อมูลเฉพาะของพารามิเตอร์เหล่านี้

TLSAบันทึกสามารถยกตัวอย่างเช่นมีลักษณะเช่นนี้

_443._tcp.www.example.com. IN TLSA  2 0 1 d2abde240d7cd3ee6b4b28c54df034b9 7983a1d16e8a410e4561cb106618e971

ด้วยโหมดการใช้งาน2หรือ3(หมายถึงการใช้ TLSA trust-anchor เพียงอย่างเดียว) ไคลเอนต์ที่รับรู้ DANE จะยอมรับใบรับรองที่ไม่ได้ลงนามโดย CA ที่น่าเชื่อถือโดยทั่วไป แต่ตรงกับTLSAบันทึก
นี่คือแนวคิดเหมือนกับที่คุณเสนอในคำถามของคุณ

จับ? ปัจจุบันไคลเอ็นต์ที่รับรู้ถึง DANE มีอยู่มากหรือน้อยที่ไม่มีอยู่ประเด็นหนึ่งคือ DNSSEC นั้นไม่ได้ถูกนำไปใช้อย่างกว้างขวาง น่าจะเป็นปัญหาไก่และไข่เล็กน้อยเนื่องจาก DANE เป็นหนึ่งในกรณีการใช้งานใหม่ที่ใหญ่เป็นอันดับแรกที่อาศัยข้อมูล DNS ที่ผ่านการตรวจสอบความถูกต้อง

มีปลั๊กอินของเบราว์เซอร์ที่เพิ่มการตรวจสอบความถูกต้อง DNSSEC และ DANEนอกเหนือจากนั้นยังมีอะไรไม่มากที่ใกล้กับจุดสำคัญในตอนนี้ และเป็นปลั๊กอินแทนที่จะสนับสนุนโดยกำเนิดมันทำหน้าที่เป็นหลักฐานของแนวคิดมากกว่าสิ่งอื่นเมื่อมันมาถึงการใช้งานทั่วไป


มันสามารถทำได้ มันได้รับการพิจารณา มันอาจจะเกิดขึ้นได้ แต่ไม่มีการเคลื่อนไหวมากนัก


ขอบคุณHåkan แอนดรูว์ชี้ให้เห็นว่าภายใต้ OP ของฉันมีปัญหากับ DNS และ DNSSEC เนื่องจาก DNSSEC ไม่ได้ถูกบังคับ (แม้ในขณะที่กุญแจอยู่ในตำแหน่งที่ TLD DNS ฉันเดา) เซิร์ฟเวอร์ DNS ตลอดทางอาจหลอกข้อมูล DANE ได้ ใช่มั้ย ดังนั้น DNSSEC จึงจำเป็นต้องมีการบันทึก DANE ให้ถูกต้องซึ่งหมายความว่าการตรวจสอบแต่ละครั้งและทุกครั้งจะต้องตรวจสอบคีย์ที่เซิร์ฟเวอร์ TLD ด้วย
Jelmer Jellema

5
@JelmerJellema ตามที่ระบุไว้ในคำตอบของฉัน DNSSEC จำเป็นต้องได้รับการตรวจสอบกับลูกค้า (ไม่ทำเช่นนั้นเป็นปัญหาที่แอนดรูว์ชี้ไป) และสามารถใช้บันทึก TLSA ที่ลงนามเรียบร้อยแล้วเท่านั้น ปัญหาที่คุณพูดถึงไม่ใช่ปัญหาในแง่ของการออกแบบมันเป็นปัญหาในแง่ของการสนับสนุนในซอฟต์แวร์กระแสหลัก
Håkan Lindqvist

2
ในขณะที่ไม่สมบูรณ์เนมเซิร์ฟเวอร์แบบเรียกซ้ำอีกมากที่ ISP หรือที่เปิดเช่น 8.8.8.8 หรือ 9.9.9.9 กำลังทำการตรวจสอบ DNSSEC dnssec-trigger ที่สร้างขึ้นบน unbound และ / หรือสิ่งต่าง ๆ เช่น stubby จะอนุญาตให้มีการตรวจสอบ DNSSEC เต็มรูปแบบบนไคลเอนต์โดยไม่จำเป็นต้องใช้ DNS DNS Resolver ในไคลเอ็นต์ แต่เราอยู่ไกลจากที่จริง ...
Patrick Mevzek
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.