ฉันสามารถใช้หมุดสาธารณะกับ LetsEncrypt ได้หรือไม่


10

ฉันสามารถติดตั้งกุญแจสาธารณะได้หรือไม่เมื่อฉันตั้งค่า cronjob เพื่อต่ออายุใบรับรอง LetsEncrypt ทุก ๆ 30 วัน?

หากต่ออายุใบรับรองใหม่คีย์สาธารณะจะได้รับการต่ออายุด้วยหรือไม่

คำตอบ:


12

คำเตือนบางคำเริ่มต้นด้วย:

  • รู้ว่าคุณกำลังทำอะไรหากคุณวางแผนที่จะใช้ HPKP
  • หากคุณทำไม่ถูกต้องหรือ "หากมีสิ่งไม่ดีเกิดขึ้น" ซึ่งไม่ได้อยู่ในการควบคุมของคุณคุณอาจทำให้โดเมนของคุณใช้งานไม่ได้
  • ตรวจสอบให้แน่ใจว่าได้ทดสอบการตั้งค่าของคุณกับโดเมนที่ไม่สำคัญหรือมีเวลาแคชสั้นมากเช่นสิบวินาทีเป็นต้น
  • คิดเกี่ยวกับ certs ที่คุณต้องการ pin: Root, กลาง, leaf ...
  • ลองคิดดูว่าถ้ามันเหมาะสมที่จะปักหมุดผู้มีอำนาจออกใบรับรองอีกคน (สำรอง) มันเป็นใบรับรองระดับกลางและใบรับรองใบของคุณ
  • ปลอดภัยกว่าดีกว่าขออภัย: ลองคิดดูว่าควรจะสำรอง CA / ใบรับรองสำรองอื่นไว้เพื่อให้มีสองหรือไม่
  • หากประเด็นและคำถามเหล่านี้ส่งเสียง "ใหม่" สำหรับคุณ: อ่านว่า HPKP เกี่ยวข้องกับอะไรและกับดักและคำเตือนทั่วไปก่อนที่คุณจะนำสิ่งนี้ไปใช้

ฉันสามารถใช้หมุดสาธารณะกับ LetsEncrypt ได้หรือไม่

  • ใช่.

หากต่ออายุใบรับรองใหม่คีย์สาธารณะจะได้รับการต่ออายุด้วยหรือไม่

  • ขึ้นอยู่กับใบรับรองที่คุณอ้างถึงและใบรับรองใดที่คุณกำลังปักหมุด

9

จะสะท้อนทุกอย่างที่ gf_ พูด

อย่างไรก็ตามเพื่อตอบคำถามคุณสามารถทำได้

โดยค่าเริ่มต้น Let's Encrypt จะสร้างคีย์และใบรับรองเมื่อต่ออายุ สิ่งนี้ทำให้การติดตั้ง HPKP ทำได้ยากหากคุณต้องการปักหมุดที่ใบไม้ซึ่งคุณควรทำในกรณีที่มีการเปลี่ยนแปลงระดับกลาง ( เหมือนที่ทำในเดือนมีนาคม 2016 )

ดังนั้นคุณมีตัวเลือกมากมายรอบตัวคุณหากคุณยังต้องการทำ HPKP:

  1. ใช้ CSR ที่แน่นอนของคุณเองแทนที่จะเป็นไคลเอนต์มาตรฐานที่สร้าง CSR ให้คุณในแต่ละครั้งดังนั้นคีย์ใบไม้จะไม่เปลี่ยนแปลง โพสต์บล็อกนี้อธิบายถึงวิธีการทำสิ่งนี้โดยเฉพาะเนื่องจากผู้เขียนใช้ HPKP
  2. ใช้การหมดอายุของ HPKP สั้น ๆ และต่ออายุภายในเวลาที่หมดอายุและนโยบายการเปลี่ยนแปลงเพื่อให้มีทั้งกุญแจเก่าและใหม่ก่อนที่จะเปลี่ยนใบรับรองจริง ๆ โดยมีเวลาเพียงพอสำหรับนโยบายใหม่ที่จะรับผู้เข้าชม
  3. ปักหมุด Let's Encrypt ไว้แทนใบไม้หรือใบรับรอง

1
เพิ่มที่ดี +1
gf_

ปลอดภัยหรือไม่ที่จะรูทรูท? สำหรับ MITM มันง่ายมากที่จะใช้ใบรับรอง Let's Encrypt ของเขา
melbic

2
"ง่ายจริงๆ" สำหรับผู้โจมตีในการรับใบรับรองชื่อโดเมนของคุณด้วย Let's Encrypt อย่างไร ไม่ทราบวิธีการใด ๆ อย่างไรก็ตามอาจเป็นไปได้กับCA ใด ๆหากพวกเขามีข้อบกพร่องในกระบวนการตรวจสอบโดเมนของพวกเขา ด้วยการตรึงรูทของ LE คุณจะลดพื้นผิวการโจมตีของคุณลงเหลือเพียง Let's Let's Encrypt เมื่อเทียบกับ CA ทุกแห่งในโลก ยังไม่ปลอดภัยเท่าใบตรึงฉันยอมรับ แต่แนะนำว่าเป็นความเสี่ยงของตัวเองดังนั้นขึ้นอยู่กับคำจำกัดความของคุณ "ปลอดภัย"
Barry Pollard

การบอกว่าฉันคิดว่ามีความเสี่ยงอย่างมากต่อ HPKP - ส่วนใหญ่มาจากมุมมองการฆ่าตัวตายด้วยตนเอง - ดังนั้นฉันจึงไม่ใช่แฟน หากคุณตัดสินใจที่จะเปลี่ยน CA หรือเปลี่ยนเส้นทางใบรับรอง (เช่นเนื่องจากการคิดค่าเสื่อมราคา SHA-256) หรือจำเป็นต้องออกใบรับรองใหม่อย่างเร่งด่วนหรือคีย์สำรองได้รับอันตราย / สูญหายหรือบุคคลที่ตั้งค่าไว้และบุคคลอื่นไม่ทราบ พวกเขาใช้ HPKP และ / หรือไม่รู้เกี่ยวกับมัน HPKP ยังไม่ได้ป้องกันรากในท้องถิ่นเช่น Superfish ดังนั้นสำหรับเว็บไซต์ส่วนใหญ่ HPKP นั้นซับซ้อนเกินไปและ IMHO ไม่คุ้มค่ากับการป้องกันเพิ่มเติมสำหรับการเพิ่มความปลอดภัยเล็กน้อย แต่นั่นเป็นเพียงความคิดเห็นของฉัน
Barry Pollard

ตกลงฉันแค่ถามเพราะฉันคิดว่าใบรับรอง LE ทั้งหมดมีใบรับรองรูทเดียวกัน ดังนั้นถ้าคุณปักรากคนอื่นด้วยใบรับรอง LE อีกใบก็สามารถใช้ MITM และปลอมในใบรับรองของตัวเอง คุณรู้ไหมว่าฉันหมายถึงอะไร
melbic

5

ฉันเพิ่งใช้สิ่งนี้โดยใช้ไคลเอนต์ที่ขาดน้ำซึ่งมีการตรวจสอบความถูกต้อง dns01 เบ็ด dns01 เป็นใบรับรองเพราะ DNS ของเราโฮสต์ใน Azure

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


คุณต้องใช้การโรลโอเวอร์คีย์ส่วนตัวเพื่อทำให้เป็นไปได้ นั่นคือคุณมีรหัสส่วนตัวปัจจุบัน (เรียกว่า A) และรหัสส่วนตัวในอนาคต (เรียกว่า B) อยู่ในมือเพื่อให้คุณสามารถเพิ่มทั้งสองลงในพินของคุณได้ ดังนั้น ณ จุดนี้หมุดของคุณคือ A และ B เมื่อถึงวันที่ต่ออายุใบรับรองคีย์ส่วนตัว A จะล้าสมัยและ B กลายเป็นจริง ในขณะเดียวกันคุณจะได้รับคีย์ส่วนตัวในอนาคตใหม่เรียกว่า C คุณสร้างรายการพินใหม่ดังนั้นตอนนี้มันจะมี B และ C นั่นคือวิธีที่คุณหมุนคีย์ส่วนตัวของคุณ แห้งสนับสนุนในขณะนี้

นอกจากนี้คุณต้องมีตะขอที่เรียกว่าทุกครั้งที่คุณต่ออายุใบรับรองและหมุนกุญแจส่วนตัวของคุณ ผมดำเนินการนี้ด้วยตัวเอง

ในที่สุดถ้าฉันได้รับสิทธินี้คุณต้องแน่ใจว่า:

HPKP age x 2 < days between cert renewals

ตัวอย่างเช่นหากอายุ HPKP ของคุณคือ 50 วันและคุณต่ออายุใบรับรองทุกๆ 30 วันลูกค้าที่เข้าชมไซต์ของคุณในวันแรกจะติดอยู่กับคีย์ส่วนตัว A และ B และคุณหมุนไปที่ B และ C ในวันที่ 31 เซิร์ฟเวอร์มี B และ C ลูกค้ามี A และ B มีการแข่งขันแม้ในวันที่ 50 และลูกค้าเปิดเว็บไซต์ได้อย่างถูกต้อง

แต่มาดูกันว่าอายุ HPKP เป็น 70 วัน คุณต่ออายุใบรับรองทุก 30 วันและลูกค้าเข้าเยี่ยมชมเว็บไซต์ของคุณในวันแรกดังนั้นอีกครั้งจะมีเฉพาะคีย์ส่วนตัว A และ B คุณเลื่อนไปที่ B และ C ในวันที่ 31 และกลิ้งไปที่ C และ D ในวันที่ 61 . เซิร์ฟเวอร์ของคุณมี C และ D ลูกค้ามี A และ B ไม่มีการจับคู่และไคลเอ็นต์จะได้รับนิ้วกลางตั้งแต่วันที่ 61 จนถึงวันที่ 71 เมื่อนโยบาย HPKP หมดอายุ


ตัวเลือกอื่นอาจปลอดภัยกว่าและง่ายกว่ามากแน่นอนคือการใช้กุญแจส่วนตัวเดียวกันทุกครั้งและสร้างคีย์ส่วนตัวสำรองหนึ่งหรือหลายตัวจากนั้นทำการเข้ารหัสเหล่านี้ในการกำหนดค่า HPKP ของคุณ


ใช่มันเป็นเรื่องยุ่งยากและอาจมีข้อแม้ที่ฉันไม่เคยนึกถึง แต่เราจะเห็นในระยะยาว เห็นได้ชัดว่าฉันติดตั้งไว้ในโดเมนย่อยที่ไม่น่าสนใจด้วยอายุ HPKP สั้น ๆ (15 วัน) เพื่อที่จะไม่ก่อให้เกิดปัญหาใหญ่


แก้ไข: ฉันได้เขียนสคริปต์บางอย่างเพื่อช่วยคุณตั้งค่า HPKP ด้วย Let's Encrypt และขาดน้ำโดยใช้ Nginx:

HPKPinx


3
ฉันตัดสินใจที่จะมีสิ่งที่ดีที่สุดของทั้งสองโลก โรลโอเวอร์คีย์ส่วนตัวอัตโนมัติ + คีย์ส่วนตัวคงที่ อาจเขียนบล็อกเกี่ยวกับมันหากใครสนใจ
bviktor

1
หากคุณทำเช่นนี้โปรดแก้ไขโพสต์ของคุณและใส่ลิงค์ - ขอบคุณ!
gf_

ขอบคุณฉันจะพยายามทำให้ดีที่สุดเพื่อให้จบสัปดาห์นี้หรือ
bviktor

2
เพิ่มลิงก์แล้ว เอกสารมีน้อย แต่รหัสอยู่ที่นั่นเพื่อให้คุณสามารถลองและแฮ็คมัน
bviktor
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.