我正在尝试使用以下链接创建具有中央证书颁发机构的多个puppet主服务器:
https://docs.puppet.com/puppet/3/scaling_multiple_masters.html#option-1-direct-agent-nodes-to-the-ca-master
但是这个文档是根据puppet版本3,并且对于puppet 4,有一个puppet服务器在JVM和jetty上运行服务请求。如上所述,doc apache将所有证书URI转发到中央服务器,如何使用puppet 4创建相同的架构。
答案 0 :(得分:0)
似乎只有Enterprise Puppet才有可能。 我认为,与开源的一样,您可以继续使用Apache / Nginx和代理请求到CA,或者在所有代理puppet.conf上配置webserver.conf和用户ca_server。我不确定CRL撤销可以做些什么。 使用Puppet 3.8我们使用以下方案,我认为它应该适用于新的puppetserver(虽然它有点疯狂):
当我们抓住inotify的人在CA上清理证书时 与incron守护进程的事件。
incron使用GET请求向所有木偶大师运行curl
pwgen -1 > /tmp/crl
curl --data-binary '@/tmp/crl' http://puppetmaster:8887/crl
在master上的nginx配置中,我们有以下内容:
server {
listen 8887;
server_name puppetmaster.net;
root /var/www;
location /crl {
limit_except POST { deny all; }
client_body_temp_path /srv/puppet/crl/;
client_body_in_file_only on;
client_body_buffer_size 128K;
client_max_body_size 128K;
proxy_pass_request_headers on;
proxy_set_header X-FILE $request_body_file;
proxy_set_body off;
proxy_redirect off;
proxy_pass http://localhost:8888;
}
}
server {
listen localhost:8888;
server_name localhost;
root /var/www;
}
因此我们将请求保存在一个文件中,并在master上再安装一个incron守护程序来捕获它并再向CA运行一个请求并通过CA API下载CRL (见木偶文件)。之后重新加载httpd。我们这样做:
#!/bin/bash
PID='/tmp/crlpid'
if [[ -f $PID ]]; then
exit
else
touch $PID
fi
function check {
rm -f /srv/puppet/crl/*
sleep 10
COUNT=$(ls -1 /srv/puppet/crl | wc -l)
if [[ $COUNT > 0 ]]; then
check
else
return 0
fi
}
if check; then
STATUS='NOTSET'
SSLDIR=`puppet config print ssldir`
CERTNAME=`hostname -f`
ENV=`puppet config print environment`
URL="https://puppetca:8140/${ENV}/certificate_revocation_list/ca"
CRT=`puppet config print cacert`
CRL=`puppet config print cacrl`
TMPCRL="/tmp/puppet_ca_crlpem.tmp"
curl --output "${TMPCRL}" \
--cacert "${SSLDIR}/certs/ca.pem" \
--cert "${SSLDIR}/certs/${CERTNAME}.pem" \
--key "${SSLDIR}/private_keys/${CERTNAME}.pem" \
-H "Accept: s" "${URL}"
openssl crl -text -in "${TMPCRL}" -CAfile "${CRT}" -noout > /dev/null 2>&1 && STATUS='VALID'
if [[ "${STATUS}" == "VALID" ]]; then
mv -f "${TMPCRL}" "${CRL}"
chown puppet:puppet "${CRL}"
systemctl reload httpd.service
fi
rm -f $PID
fi