จะเพิ่มชื่อ dns หลายชื่อใน puppetmaster ของฉันได้อย่างไร


16

puppet ของฉันของฉันบนต้นแบบ

[master]
certname = myname.mydomain.com
ca_server = myname.mydomain.com
certdnsnames = puppet;puppet.local;myname.dyndns.org;hivemind.local;

สำหรับความเข้าใจของฉันกับ certdnsnames ที่กำหนดดังต่อไปนี้ควรใช้งานได้:

puppet agent --server myname.dyndns.org --test

แต่ฉันได้รับข้อผิดพลาดต่อไปนี้:

err: Could not retrieve catalog from remote server: hostname was not match with the server certificate

จะหลีกเลี่ยงข้อผิดพลาดนี้ได้อย่างไร? วิธีการกำหนดชื่อรับรองอย่างถูกต้อง? ฉันได้พบเอกสารที่แตกต่างเกี่ยวกับเรื่องนี้ แต่ไม่มีตัวอย่างง่าย ๆ ii ใช้ "," สำหรับการแยกฉันไม่สามารถลงชื่อได้เลย ฉันยังได้เห็นไวยากรณ์เช่น

certdnsnames = puppet:puppet.intra.myserver.fr,puppet.myserver.fr:puppet,puppet:puppet,puppet.intra.myserver.fr,puppet.myserver.fr

http://projects.puppetlabs.com/issues/5776

แต่สำหรับฉันมันไม่ชัดเจนเวลาที่จะเพิ่ม "หุ่นเชิด:" และเมื่อไม่

คำตอบ:


25

เพื่อประโยชน์ของคนอื่นที่สะดุดคำตอบนี้:

เนื่องจากCVE-2011-3872หุ่นกระบอกไม่รองรับcertdnsnamesตัวเลือกอีกต่อไป จากเอกสารประกอบ:

การตั้งค่า certdnsnames ไม่สามารถใช้งานได้อีกต่อไปหลังจาก CVE-2011-3872 เราเพิกเฉยต่อคุณค่าทั้งหมด สำหรับคำขอใบรับรองของคุณเองคุณสามารถตั้งค่า dns_alt_names ในการกำหนดค่าและจะใช้ในพื้นที่ ไม่มีตัวเลือกการกำหนดค่าเพื่อตั้งชื่อ DNS alt หรือค่า subjectAltName อื่น ๆ สำหรับใบรับรองโหนดอื่น หรือคุณสามารถใช้ตัวเลือกบรรทัดคำสั่ง --dns_alt_names เพื่อตั้งค่าป้ายกำกับที่เพิ่มขณะสร้าง CSR ของคุณเอง

คุณสามารถสร้างใบรับรอง SSL สำหรับเซิร์ฟเวอร์ของคุณโดยใช้ subjectAlternativeName เช่นนี้:

$ puppet cert generate <puppet master's certname> --dns_alt_names=<comma-separated list of DNS names>

3
หมายเหตุเพิ่มเติม: ก่อนที่จะรัน puppet cert สร้างให้ลบไฟล์. pem สำหรับต้นแบบหุ่นเชิดใน / var / lib / puppet / ssl / private_keys, / var / lib / puppet / ssl / ca / ​​ลงนาม / และ / var / lib / puppet / SSL / ใบรับรอง การสร้างใบรับรองใหม่ไม่ได้เป็นการฆ่าการเชื่อมต่อกับลูกค้าที่มีอยู่เนื่องจากพวกเขาตรวจสอบใบรับรองของ puppetmaster โดยใช้ใบรับรองของ CA ซึ่งพวกเขาดาวน์โหลดตอนแรกเชื่อมต่อ
Erik Forsberg

9
เฮ้ขอบคุณลาร์สจากอดีต คุณเพิ่งตอบคำถามของฉัน
larsks

2

สำหรับ Puppet 4+ ใช้คำสั่งต่อไปนี้เพื่อเปลี่ยนชื่อ dns ที่ยอมรับสำหรับใบรับรอง puppetserver:

เปลี่ยนชื่อใบรับรองที่มีอยู่เป็น * .backup:

mv /etc/puppetlabs/puppet/ssl/private_keys/$(hostname -f).pem{,.backup}
mv /etc/puppetlabs/puppet/ssl/ca/signed/$(hostname -f).pem{,.backup}
mv /etc/puppetlabs/puppet/ssl/certs/$(hostname -f).pem{,.backup}

สร้างใบรับรองใหม่ (เพิ่มชื่อ alt ที่คุณต้องการ):

puppet cert generate $(hostname -f) --dns_alt_names=$(hostname -f),puppet

รีสตาร์ท puppetserver เพื่อใช้ใบรับรองใหม่

service puppetserver restart

1
  • ประการแรกcertdnsnamesคือรายการที่คั่นด้วยโคลอน
  • ประการที่สองข้อผิดพลาดนี้เกิดขึ้นเนื่องจากเอเจนต์กำลังติดต่อกับมาสเตอร์โดยใช้ชื่อโฮสต์ที่ไม่ได้รวมไว้เมื่อลงชื่อใบรับรอง: http://docs.puppetlabs.com/guides/troubleshooting.html

ขอโทษที่ไม่ยอมรับคำตอบนี้ฉันมีปัญหาในการแปลกับ "โคลอน" ดังนั้นคำตอบอื่น ๆ ก็ช่วยฉันได้โดยแสดงให้ฉันเห็นถ่านที่ถูกต้อง :) แต่ขอบคุณสำหรับคำตอบของคุณ
c33s

0

ตามที่

puppet agent --genconfig

คุณต้องใช้รายการที่คั่นด้วยโคลอน (":" ไม่ ";")

ดังนั้นควร

certdnsnames = 'puppet:puppet.local:myname.dyndns.org:hivemind.local'

HTH


0

ในการเพิ่มรายการ SAN ไปยังใบรับรองเซิร์ฟเวอร์ puppet ให้ใช้:

systemctl stop puppetserver
puppetserver ca setup --subject-alt-names $(hostname -f),puppet
systemctl start puppetserver

อาจต้องล้าง certs ที่มีอยู่ด้วยrm -rf $(puppet master --configprint ssldir)เช่นกัน

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