概要
以下の記事で、Chef Serverのバックアップ・リストアについてご紹介しました。
ChefTips: Chef Serverのバックアップについて
ChefTips: Chef Serverのリストアについて
Chef Server を 自己証明書で運用しており、Chef Server リストア後、WorkstationとNodeがChefServerに接続できなくなる事象が発生した場合の考慮点についてご紹介します。
発生する事象
Chef Serverリストア後、Workstationからknife
コマンドを使用した場合、以下のようなエラーがでます。
$ knife node list
ERROR: SSL Validation failure connecting to host: sjkcent01.chef.local - SSL_connect returned=1 errno=0 state=error: certificate verify failed (self signed certificate)
ERROR: Could not establish a secure connection to the server.
Use `knife ssl check` to troubleshoot your SSL configuration.
If your Chef Server uses a self-signed certificate, you can use
`knife ssl fetch` to make knife trust the server's certificates.
Original Exception: OpenSSL::SSL::SSLError: SSL Error connecting to https://sjkcent01.chef.local/organizations/test/nodes - SSL_connect returned=1 errno=0 state=error: certificate verify failed (self signed certificate)
Chef Serverリストア後、Nodeから chef-client
コマンドを使用した場合、以下のようなエラーがでます。
Unexpected Error:
-----------------
OpenSSL::SSL::SSLError: SSL Error connecting to https://sjkcent01.chef.local/organizations/test/nodes/sjkcent02 - SSL_connect returned=1 errno=0 state=error: certificate verify failed (self signed certificate)
事象が発生する原因
trusted_certs として Workstation、Nodeに保管している Chef Serverの証明書 と、Chef Serverが実際に使用している自己証明書が不整合を起こしているために発生します。
どうやら、chef-server-ctl backup
chef-server-ctl restore
コマンドは、Chef Server同梱のNginxが利用しているSSL証明書はバックアップ・リストアしてくれないようです。そのため、chef server-ctl restore
後のchef-server-ctl reconfigure
で自己証明書が再作成されてしまい、不整合が発生します。
ちゃんとしたCAから発行されるSSL証明書同様、自分で管理しておいてね、ということのようですね。(公式マニュアルにその記述はないのは不親切ですが…)
自己証明書のデフォルトの保管場所
Chef Server:
$ pwd
/var/opt/opscode/nginx/ca
$ ls -l
-rw-------. 1 opscode opscode 1489 Oct 22 05:10 sjkcent01.chef.local.crt
Chef Workstation:
$ pwd
(Chefレポのパス)/.chef/trusted_certs
$ ls -l
-rw-r--r--. 1 root root 1489 Oct 22 21:10 sjkcent01_chef_local.crt
Chef Node:
$ pwd
/etc/chef/trusted_certs
$ ls -l
-rw-r--r--. 1 root root 1489 Oct 22 21:14 sjkcent01_chef_local.crt
対応策
Chef Workstaion では、Chef Workstaionの初期設定時同様、knife ssl fetch
で解消できます。
Chef Client では、以下のいずれかの方法で対応が可能です。
1. 全Chef Nodeで fetch処理実施
全Chef Nodeで Workstaion同様、knife ssl fetch
する方法です。
Workstaionから以下コマンドで、全Chef Nodeに対して爆撃可能です。
$ knife ssh 'name:*' 'sudo knife ssl fetch -c /etc/chef/client.rb'
2. 予め自己証明書もバックアップしておく
Chef Server側でchef-server-ctl backup
する際に、合わせて /var/opt/opscode/nginx/ca
配下の自己証明書もバックアップをしておく方法です。
chef-server-ctl restore
後、そのバックアップしておいた自己証明書を既定の場所に保存してください。
3. 予めChef NodeのSSL検証を無効化しておく
Chef Client が Chef Server に接続する際のSSL検証を無効化する設定も可能です。
Chef Client 側の設定ファイル /etc/chef/client.rb
に 以下一行を追加してください。
ssl_verify_mode :verify_none