ชื่อโฮสต์ของ Puppet ไม่ตรงกับใบรับรองเซิร์ฟเวอร์


10

ฉันกำลังพยายามติดตั้ง Ubuntu VM ด้วยหุ่นกระบอกที่ติดตั้งเพื่อให้ฉันสามารถทดสอบการตั้งค่าการผลิตของเราได้ ฉันมีปัญหาในการรับ puppetmaster และ puppet ให้คุยกัน ให้ฉันพาคุณผ่านขั้นตอนของฉัน (เซิร์ฟเวอร์hostnameคือ FQDN ของรูปแบบ "web1.xxx.xxx.net")

ดังนั้นก่อนอื่นฉันจะลบไฟล์ pem ทั้งหมด (ยกเว้น CA pems แน่นอน) จาก/etc/puppet/sslไดเรกทอรีเพื่อให้ฉันสามารถเริ่มต้นใหม่ได้ puppetca --listไม่มีผลลัพธ์

จากนั้นฉันเรียกใช้puppetd --testเพื่อสร้าง CSR สำหรับ puppetmaster puppetca --listตอนนี้มีชื่อโฮสต์ของฉัน ("web1.xxx.xxx.net")

puppetca --sign web1.xxx.xxx.netจากนั้นผมทำงาน ตอนนี้puppetca --listว่างเปล่าอีกครั้ง - ทุกอย่างทำงานได้ดีจนถึงตอนนี้

สุดท้ายฉันก็วิ่งpuppetd --testอีกครั้ง ฉันได้รับผลลัพธ์ต่อไปนี้:

err: Could not retrieve catalog from remote server: hostname was not match with the server certificate
warning: Not using cache on failed catalog
err: Could not retrieve catalog; skipping run

รายการเนื้อหาของไฟล์แสดงไดเรกทอรีพีอีเอ็มที่มีชื่อเซิร์ฟเวอร์ที่ถูกต้องซึ่งตรงกับฉัน/etc/puppet/ssl hostnameใครมีแนวคิดในการโจมตีปัญหานี้บ้าง

คำตอบ:


9

ข้อผิดพลาดเป็นเพราะไคลเอนต์โดยค่าเริ่มต้นเชื่อมต่อกับชื่อโฮสต์เซิร์ฟเวอร์ 'puppet' แต่ใบรับรองที่นำเสนอไม่มี 'puppet' ไม่ว่าจะเป็นหัวเรื่องหรือเป็นแอตทริบิวต์ SubjectAltName

หากต้องการแก้ไขคุณสามารถ (เลือกหนึ่ง):

  1. แทนที่จะเริ่มต้นใบรับรอง puppetmaster ของคุณโดยเรียกใช้puppetdให้เริ่มต้นด้วยการเรียกใช้puppetmasterdซึ่งจะทำให้ชื่อหัวเรื่องใบรับรองรวมถึง "puppet"

  2. แทนที่จะปล่อยให้สิ่งต่าง ๆ มีโอกาสคุณสามารถใช้puppetca --generate --certdnsnames puppet:puppet.mydomain.com web1.xx.xx.xx.net- ตัวเลือก certdnsnames ระบุรายการของ SubjectAltNames ซึ่งจะรวมอยู่ในใบรับรอง ควรมีรายการที่คั่นด้วยโคลอนของชื่อใด ๆที่ไคลเอ็นต์จะใช้เพื่อติดต่อเซิร์ฟเวอร์

  3. แทนที่จะเรียกใช้puppetd --testบนไคลเอนต์ให้เรียกใช้puppetd --test --server=web1.xx.xx.xx.netเพื่อให้ชื่อเซิร์ฟเวอร์ที่ไคลเอ็นต์เชื่อมต่อเป็นชื่อที่มีอยู่จริงในใบรับรองที่แสดงโดยเซิร์ฟเวอร์

ตรวจสอบรายการบล็อกที่ยอดเยี่ยมของ masterzen สำหรับการแก้ไขปัญหาเพิ่มเติม: Puppet SSL อธิบาย


3

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

[2012-02-28 16:21:09] INFO  
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 2 (0x2)
        Signature Algorithm: sha1WithRSAEncryption
        Issuer: CN=ca
        Validity
            Not Before: Feb 26 16:32:46 2012 GMT
            Not After : Feb 24 16:32:46 2017 GMT
        Subject: CN=ubuntu.localdomain

ฟิลด์หัวเรื่องแสดงให้เห็นว่า CN คือ "ubuntu.localdomain" ดังนั้นฉันจึงใช้งานหุ่นเชิดโดยทำดังนี้:

puppetd -t --server=ubuntu.localdomain --fqdn=myfqdn

หวังว่านี่จะช่วย :-)


2

นอกจากสิ่งที่โปตอบแล้วฉันต้องการเน้นว่าคุณสามารถตรวจสอบใบรับรองหุ่นกระบอกโดยใช้:

openssl x509 -text -in /var/lib/puppet/ssl/certs/<hostname_of_puppet_master>

จากนั้นตรวจสอบให้แน่ใจว่าคุณใช้ชื่อโฮสต์เดียวกันทุกประการจากไคลเอนต์:

puppetd --server <hostname_of_puppet_master> <etc>

0

เซิร์ฟเวอร์ทั้งสองสามารถแก้ไขกันได้หรือไม่ ฉันเดาว่าเนื่องจากคุณเป็น VMing คุณอาจขาดการแก้ไขชื่อ หากคุณไม่ได้ใช้ DNS เพื่อให้เซิร์ฟเวอร์แก้ปัญหาซึ่งกันและกันคุณต้องเพิ่มรายการลงใน/etc/hostsไฟล์ของคุณบนเซิร์ฟเวอร์ทั้งสอง

Puppet ต้องการชื่อโฮสต์เพื่อแก้ไข IP ที่ถูกต้องหากไม่มีสิ่งนี้คุณจะได้รับข้อผิดพลาดที่คุณกล่าวถึง คุณอาจต้องสร้างใบรับรองขึ้นใหม่หลังจากทำเช่นนี้ ทั้งสองเครื่องควรสามารถ ping แต่ละชื่อโฮสต์ได้

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


อ่าฉันควรจะระบุ Puppet และ Puppetmaster ต่างก็ทำงานบนเซิร์ฟเวอร์เดียวกัน VM ของฉัน และใช่ฉันสามารถ ping คอมพิวเตอร์ด้วยตัวเองโดยใช้ FQDN
RISCfuture

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