私は2台のマシン、パペットマスター(ホスト名puppet
)と1台のクライアント(ホスト名git
)を持っています。マスターマシンのパペットエージェントは問題なく動作します。 git
のエージェントは、「400必要なSSL証明書が送信されませんでした」で失敗します。まず、シン/ nginxの問題であるパペットマスターの構成:
puppet:~# Ruby -v
Ruby 1.9.2p0 (2010-08-18 revision 29036) [i486-linux]
puppet:~# puppet --version
2.7.9
puppet:~# cat /etc/nginx/sites-enabled/default
server {
listen puppet:8140;
ssl on;
ssl_certificate /var/lib/puppet/ssl/certs/puppet.pem;
ssl_certificate_key /var/lib/puppet/ssl/private_keys/puppet.pem;
ssl_ciphers ALL:-ADH:+HIGH:+MEDIUM:-LOW:-SSLv2:-EXP;
ssl_client_certificate /var/lib/puppet/ssl/ca/ca_crt.pem;
ssl_verify_client on;
proxy_redirect off;
proxy_set_header Host $Host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Client-Verify $ssl_client_verify;
proxy_set_header X-Client-Verify SUCCESS;
proxy_set_header X-Client-DN $ssl_client_s_dn;
proxy_set_header X-SSL-Subject $ssl_client_s_dn;
proxy_set_header X-SSL-Issuer $ssl_client_i_dn;
default_type application/x-raw;
location /production/file_content/ {
rewrite ^/production/file_content/modules/([^/]+)/(.*) /$1/files/$2;
break;
root /etc/puppet/modules/;
}
location / {
proxy_pass http://puppet-production;
}
}
# cat /etc/nginx/conf.d/puppet-production-upstream.conf
upstream puppet-production {
server unix:/var/run/puppet/master.00.sock;
server unix:/var/run/puppet/master.01.sock;
server unix:/var/run/puppet/master.02.sock;
}
puppet:~# cat /etc/supervisor/conf.d/puppetmaster.conf
# This file is autogenerated by Puppet. Manual changes will be overwritten!
[program:puppetmaster]
command=/usr/bin/thin start -e development --socket /var/run/puppet/master.%(process_num)02d.sock --user puppet --group puppet --chdir /etc/puppet -R /etc/puppet/config.ru
process_name=%(program_name)s_%(process_num)02d
numprocs=3
priority=999
autostart=true
autorestart=unexpected
startsecs=3
startretries=3
exitcodes=0,2
stopsignal=TERM
stopwaitsecs=10
redirect_stderr=false
stdout_logfile=/var/log/supervisor/puppetmaster/puppetmaster.out
stdout_logfile_maxbytes=250MB
stdout_logfile_backups=10
stderr_logfile=/var/log/supervisor/puppetmaster/puppetmaster.err
stderr_logfile_maxbytes=250MB
stderr_logfile_backups=10
puppet:~# cat /etc/puppet/puppet.conf
[main]
ssldir=$vardir/ssl
[master]
certname=puppet
回避策の適用 ここgit
を操り人形マスターに紹介しようとすると、この時点でのみgit
エージェントを取得できます。
git:~# puppet agent --waitforcert 30 --test
err: Could not request certificate: Error 400 on SERVER: <html>
<head><title>400 No required SSL certificate was sent</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<center>No required SSL certificate was sent</center>
<hr><center>nginx/1.1.8</center>
</body>
</html>
この resource は、Simulate SSL Connectionセクションで、私のgit
ボックスから実行することを提案しています。
openssl s_client -Host puppet -port 8140 -cert /var/lib/puppet/ssl/certs/git.troutwine.us.pem -key /var/lib/puppet/ssl/private_keys/git.troutwine.us.pem -CAfile /var/lib/puppet/ssl/certs/ca.pem
これの問題は私が行方不明であるということです/var/lib/puppet/ssl/certs/git.troutwine.us.pem
:
git:~# tree /var/lib/puppet/ssl/
/var/lib/puppet/ssl/
├── certificate_requests
├── certs
│ └── ca.pem
├── private
├── private_keys
│ └── git.troutwine.us.pem
└── public_keys
└── git.troutwine.us.pem
昔ながらのwebrickpuppetmasterdは問題なく動作します。私が失敗しているのは、nginxとpuppetの組み合わせだけです。両方のマシンはntpdを実行しており、許容可能な時間スプレッドがあります。私は何が間違っているのですか?
#puppet
チャネルのnewlは、ssl_verify_client
を「on」ではなく「optional」に変更することを提案しました。私はこれをしました、そしてすべては今桃色です。
これは悪いことだと私は確信していましたが、newlの提案の後、その理由を思い出せませんでした。誰かdoesこれが理想的な構成設定ではないと信じている場合は、私に知らせてください。
マスターでパペットエージェントを実行する場合は、SSLディレクトリを共有しないようにする必要があります。私はその構成から奇妙なものの結果を見てきました。
私の/etc/puppet/puppet.conf
からの抜粋:
[main]
# Where SSL certificates are kept for the puppet master and other
# subcommands.
# Note that this is a global setting because most of the subcommands
# other than 'agent' are only valid in puppetmaster context.
# The default value is '$confdir/ssl'.
vardir = /var/lib/puppetmaster
ssldir = $vardir/ssl
[agent]
# The var & SSL dir for the agent; listed explicitly because the master
# and other subcommands intended for the master should use
# the different SSL state.
# The default value is '$confdir/ssl'.
vardir = /var/lib/puppet
ssldir = $vardir/ssl