PuppetエージェントからPuppetマスター(nginx / ruby​​1.9で実行)SSL証明書の問題


3

私は2つのマシン、パペットマスター(ホスト名)と1つのpuppetクライアント(ホスト名)を持っていますgit。マスターマシン上のパペットエージェントは問題なく動作します。上のエージェントgitは「400 No required SSL certificate was sent」で失敗します。最初に、シン/ 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>

このリソースは、私のボックスから、実行するSSL接続のシミュレートセクションで提案してい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

昔ながらのwebrick puppetmasterdはうまく動作します。nginxとpuppetの組み合わせだけが失敗します。両方のマシンがntpdを実行しており、許容可能な時間の広がりがあります。何が間違っていますか?


public_keys代わりに1つを使用します-既にパペットCAによって署名されています。
シェーンマッデン

いいえ、質問の本文でこれをより明確にしますが、最初に表示されるパペットエージェントコマンドgitは、gitボックスをパペットマスターに紹介する試みです。
トラウトワイン

両方のマシンの日付と時刻が密接に同期していることを確認してください。
ダニエルC.ソブラル

彼らです。両方のマシンでntpを実行しています。時間差は約200ミリ秒です。
トラウトワイン

回答:


2

#puppetチャンネルのnewlは、ssl_verify_client「on」ではなく「optional」に変更することを提案しました。私はこれをやったが、今はすべてが桃色だ。

私はこれが悪いことだと確信していましたが、newlの提案の後、理由を思い出すことができませんでした。誰かこれが理想的な構成設定ではないと信じているなら、私に知らせてください。


1

マスターでパペットエージェントを実行する場合は、それらが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

それが問題になることはありませんでしたが、ありがとうございます。環境を変更します。
トラウトワイン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.