fbpx

[和訳] Chef 12: 「信頼できない自己署名証明書」エラーの修正 #opschef_ja #getchef_ja

この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。

本稿は Chef 12: Fix Untrusted Self Signed Certificates (2014/12/12) の和訳です。

この記事はjtimberman's Code Blogからの転載(訳注:原文)です。

シナリオ: 新規にChef Serverをバージョン12で立ち上げようと思い立ち、ローカルシステムにChef 12をインストールしました。UserとOrganizationを作るために、マネジメントコンソールにログインし(もしくはchef-server-ctlコマンドでコマンドラインから)、次のようなknife.rbが準備できているとします。


node_name 'jtimberman'
client_key 'jtimberman.pem'
validation_client_name 'tester-validator'
validation_key 'tester-validator.pem'
chef_server_url 'https://chef-server.example.com/organizations/tester'

しかし、knifeコマンドで確認しようとしたら次のようになってしまいました。


% knife client list
ERROR: SSL Validation failure connecting to host: chef-server.example.com - SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
ERROR: OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

これは、Chef Client 12ではデフォルトですべてのリクエストでSSL検証が有効になったためです。Chef Server 12インストール時に生成された証明書は自己署名なので、検証済みのCAによって署名されておらず、失敗するのです。大胆不敵なユーザを気にしないのであれば、サーバからSSL証明書を取得して、「信頼できる」証明書として格納することができます。どのようにするかというと、knife ssl checkを用います。


Connecting to host chef-server.example.com:443
ERROR: The SSL certificate of chef-server.example.com could not be verified
Certificate issuer data: /C=US/ST=WA/L=Seattle/O=YouCorp/OU=Operations/CN=chef-server.example.com/emailAddress=you@example.com
Configuration Info:
OpenSSL Configuration:
* Version: OpenSSL 1.0.1j 15 Oct 2014
* Certificate file: /opt/chefdk/embedded/ssl/cert.pem
* Certificate directory: /opt/chefdk/embedded/ssl/certs
Chef SSL Configuration:
* ssl_ca_path: nil
* ssl_ca_file: nil
* trusted_certs_dir: "/Users/jtimberman/Downloads/chef-repo/.chef/trusted_certs"

TO FIX THIS ERROR:

If the server you are connecting to uses a self-signed certificate, you must
configure chef to trust that server's certificate.

By default, the certificate is stored in the following location on the host
where your chef-server runs:

/var/opt/chef-server/nginx/ca/SERVER_HOSTNAME.crt

Copy that file to your trusted_certs_dir (currently: /Users/jtimberman/Downloads/chef-repo/.chef/trusted_certs) using SSH/SCP or some other secure method, then re-run this command to confirm that the server's certificate is now trusted.

注意点として、これを書いている時点ではchef-serverの位置が正しくありません。正しくは/var/opt/opscodeです。

knifeにはfetchプラグインもあります。前述した、自動的に事前設定された信頼できる証明書の位置に、証明書をダウンロードしましょう。


% knife ssl fetch
WARNING: Certificates from chef-server.example.com will be fetched and placed in your trusted_cert directory (/Users/jtimberman/Downloads/chef-repo/.chef/trusted_certs).
Knife has no means to verify these are the correct certificates. You should
verify the authenticity of these certificates after downloading.
Adding certificate for chef-server.example.com in /Users/jtimberman/Downloads/chef-repo/.chef/trusted_certs/chef-server.example.com.crt

この証明書は、ダウンロードしたものが実際にChef Server上にある証明書と同じものであると検証されなければいけません。例えば、SHA256チェックサムを比較します。


% ssh ubuntu@chef-server.example.com sudo sha256sum /var/opt/opscode/nginx/ca/chef-server.example.com.crt
043728b55144861ed43a426c67addca357a5889158886aee50685cf1422b5ebf/var/opt/opscode/nginx/ca/chef-server.example.com.crt
% gsha256sum .chef/trusted_certs/chef-server.example.com.crt
043728b55144861ed43a426c67addca357a5889158886aee50685cf1422b5ebf.chef/trusted_certs/chef-server.example.com.crt

再度knife client listを実行してみましょう。


% knife client list
tester-validator

やりました!

では、インフラ内のすべてのNodeのtrusted_certs_dir、デフォルトでは/etc/chef/trusted_certsに証明書を配布する必要があります。最も簡単に行うには、対象のNodeに対してknife sshを用いてknifeを実行することです。


% knife ssh 'name:*' 'sudo knife ssl fetch -c /etc/chef/client.rb'
node-output.example.com WARNING: Certificates from chef-server-example.com will be fetched and placed in your trusted_cert
node-output.example.com directory (/etc/chef/trusted_certs).
node-output.example.com
node-output.example.com Knife has no means to verify these are the correct certificates. You should
node-output.example.com verify the authenticity of these certificates after downloading.
node-output.example.com
node-output.example.com Adding certificate for chef-server.example.com in /etc/chef/trusted_certs/chef-server.example.com.crt

この出力は、knife sshで得られたすべてのNodeに対して繰り返して行われます。もちろん、knife sshを用いて先に行ったようにSHA256チェックサムを確認しておきましょう。

新規CTA