꼭두각시 호스트 이름이 서버 인증서와 일치하지 않습니다


10

퍼펫이 설치된 Ubuntu VM을 설정하려고하여 프로덕션 설정을 로컬에서 테스트 할 수 있습니다. puppetmaster와 puppet이 서로 대화하는 데 문제가 있습니다. 내 단계를 안내해 드리겠습니다. (서버 hostname는 "web1.xxx.xxx.net"형식의 FQDN입니다.)

먼저, /etc/puppet/ssl디렉토리 에서 모든 pem 파일 (물론 CA pem 제외)을 지워서 새로 시작할 수 있습니다. puppetca --list결과를 반환하지 않습니다.

그런 다음 puppetd --test꼭두각시 마스터에 대한 CSR을 생성합니다. 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디렉토리 의 내용을 나열하면 올바른 서버 이름을 가진 PEM 파일이 표시 hostname됩니다. 누구나이 문제를 공격하는 방법에 대한 아이디어가 있습니까?

답변:


9

오류는 기본적으로 클라이언트가 서버 호스트 이름 'puppet'에 연결하지만 제공된 인증서에 제목 또는 SubjectAltName 속성으로 'puppet'이 없기 때문입니다.

수정하려면 다음 중 하나를 수행하십시오.

  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 Explained


3

꼭두각시 마스터 로그 파일을 확인 했습니까? 동일한 문제를 발견했으며 서버가 인증서 정보를 기록한다는 것을 알았습니다.

[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

Pau가 답변 한 것 외에도 다음을 사용하여 puppetmasters 인증서를 검사 할 수 있음을 강조하고 싶습니다.

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

그런 다음 클라이언트에서 동일한 호스트 이름을 사용해야합니다.

puppetd --server <hostname_of_puppet_master> <etc>

0

두 서버가 서로를 해결할 수 있습니까? 내 생각에 VMM을 사용하고 있기 때문에 이름 확인이 누락되었을 수 있습니다. DNS를 사용하여 서버가 서로를 해결할 수없는 경우 /etc/hosts두 서버 의 파일에 항목을 추가해야 합니다.

Puppet은 호스트 이름이 올바른 IP로 해석되도록 요구하지만,이 이름이 없으면 언급 한 오류가 발생합니다. 이 작업을 수행 한 후 인증서를 다시 작성해야 할 수도 있습니다. 두 머신 모두 호스트 이름으로 각각 핑할 수 있어야합니다.

VM에서주의해야 할 또 다른 사항은 서버의 시간을 동기화한다는 것입니다. 그렇지 않으면 인증서가 유효하지 않을 수 있습니다.


아, 지정 했어야했는데 Puppet과 Puppetmaster는 모두 동일한 서버에서 실행됩니다. 내 VM. 그리고 예, FQDN을 사용하여 컴퓨터 자체를 핑 (Ping) 할 수 있습니다.
RISCfuture

죄송합니다. Joshua가 잘못되었습니다. 꼭두각시는 제시된 인증서에 대해 DNS-> IP 유효성 검사를 수행하지 않습니다. 그것은 않는 오류의 원인이 무엇이며 certname 검증에 호스트 이름을.
eric sorenson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.