ussrlongbow.certbot
Ansible ロール: Certbot (Let's Encrypt 用)
Certbot(Let's Encrypt用)をインストールして設定します。
要件
ソースからインストールする場合、Git が必要です。geerlingguy.git
ロールを使って Git をインストールできます。
一般的に、ソースからインストールすること(「ソースから Git でのインストール」セクション参照)は、特に古い OS リリースを使用している場合、Certbot と Let's Encrypt の使用体験を良くします。
ロール変数
certbot_install_from_source
変数は、Certbot を Git からインストールするかパッケージ管理からインストールするかを制御します。デフォルトは後者なので、変数は no
に設定されています。
certbot_auto_renew: true
certbot_auto_renew_user: "{{ ansible_user | default(lookup('env', 'USER')) }}"
certbot_auto_renew_hour: 3
certbot_auto_renew_minute: 30
certbot_auto_renew_options: "--quiet --no-self-upgrade"
このロールは、指定されたユーザーアカウントの下で毎日指定された時刻に cron ジョブを実行するように設定します。デフォルトでは、毎日 03:30:00 に certbot renew
(または certbot-auto renew
)が実行されます。更新はトラフィックの少ない時間に非 root ユーザーアカウントで行うことをお勧めします。
自動証明書生成
現在のところ、このロールを使用して新しい証明書を生成するためのビルトインメソッドは1つです:standalone
。将来的には他の方法(例:nginx や apache を使用する方法)も追加されるかもしれません。
完全な例については: molecule/default/playbook-standalone-nginx-aws.yml の完全に機能するテストプレイブックを参照してください。
certbot_create_if_missing: false
certbot_create_method: standalone
certbot_create_if_missing
を yes
または True
に設定すると、このロールが証明書を生成します。証明書生成に使用するメソッドは certbot_create_method
変数で設定します。現在許可されている値には: standalone
が含まれます。
certbot_admin_email: email@example.com
Let's Encrypt の利用規約に同意し、証明書関連の通知を受け取るために使用するメールアドレスです。このメールアドレスは、あなたまたはあなたの組織が定期的に監視するものに設定してください。
certbot_certs: []
# - email: [email protected]
# domains:
# - example1.com
# - example2.com
# - domains:
# - example3.com
証明書を生成するためのドメイン(その他のデータ)のリストです。リストの各項目に email
キーを追加することで、certbot_admin_email
を上書きすることができます。
certbot_create_command: "{{ certbot_script }} certonly --standalone --noninteractive --agree-tos --email {{ cert_item.email | default(certbot_admin_email) }} -d {{ cert_item.domains | join(',') }}"
certbot_create_command
は証明書を生成するために使用されるコマンドを定義します。
スタンドアロン証明書生成
certbot_create_standalone_stop_services:
- nginx
certbot
がポート 80 および 443 で自分のスタンドアロンサーバーを実行する際に停止すべきサービスを指定します。Apache を実行している場合は、これを apache2
(Ubuntu)または httpd
(RHEL)に設定します。また、ポート 443 で Nginx を使い、ポート 80 に他のサービス(例:Varnish や Java アプリ)を使っている場合は、リストに追加して証明書生成時に停止されるようにします。
これらのサービスは、新しい証明書が初めて生成されるときだけ停止されます。
Git からのソースインストール
必要に応じて、Certbot を Git ソースリポジトリからインストールできます。これはいくつかのケースで便利ですが、特に古いディストリビューションに Certbot パッケージが利用できない場合(例:CentOS < 7、Ubuntu < 16.10、Debian < 8)に役立ちます。
certbot_install_from_source: false
certbot_repo: https://github.com/certbot/certbot.git
certbot_version: master
certbot_keep_updated: true
Certbot Git リポジトリのオプションです。ソースからインストールするには、certbot_install_from_source
を yes
に設定します。これにより、設定された certbot_repo
がクローンされ、certbot_version
設定が尊重されます。certbot_keep_updated
が yes
に設定されている場合、ロールが実行されるたびにリポジトリが更新されます。
certbot_dir: /opt/certbot
Certbot がクローンされるディレクトリです。
ワイルドカード証明書
Let's Encrypt は ワイルドカード証明書の生成をサポートしています が、生成と使用のプロセスは少し複雑です。このロールを使用してワイルドカード証明書を管理する方法の例については、このプルリクエストのコメント を参照してください。
Michael Porter は、Cloudflare を使用した Ansible での Let's Encrypt ワイルドカード証明書の作成 の手順も紹介しています。
依存関係
なし。
例プレイブック
- hosts: servers
vars:
certbot_auto_renew_user: your_username_here
certbot_auto_renew_minute: 20
certbot_auto_renew_hour: 5
roles:
- geerlingguy.certbot
他の例は tests/
ディレクトリにあります。
Certbot での証明書の手動作成
注: このロールは自動的に証明書を生成できます。上記の「自動証明書生成」ドキュメントを参照してください。
certbot
(または certbot-auto
)スクリプトを使用して手動で証明書を作成できます(Ubuntu 16.04 では letsencrypt
を使用、ソース/Git からインストールする場合は /opt/certbot/certbot-auto
を使用)。以下に Certbot を使って証明書を設定するためのいくつかのコマンド例を示します。
# すべての Apache バーチャルホスト用に自動的に証明書を追加します(注意して使用してください!)。
certbot --apache
# 証明書を生成しますが、Apache の設定は変更しません(安全です)。
certbot --apache certonly
新しい証明書を追加するプロセスを完全に自動化したいが、このロールのビルトイン機能を使用したくない場合は、コマンドラインオプションを使用して登録、利用規約に同意し、スタンドアロンサーバーを使用して証明書を生成することができます:
- ポート 80 および 443 でリッスンしているサービス(Apache、Nginx、Varnish など)を停止します。
certbot register --agree-tos --email [[email protected]]
のように登録します。 - 注:同じサーバーで追加の証明書を生成する際にこのステップを再度行う必要はありません。- このサーバーを指す DNS のドメイン用に証明書を生成します:
certbot certonly --noninteractive --standalone -d example.com -d www.example.com
- 以前にポート 80 および 443 でリッスンしていたサービスを再起動します。
- ウェブサーバーのバーチャルホストTLS設定を新しい証明書(
fullchain.pem
)と秘密鍵(privkey.pem
)が生成したものにポイントします。 - ウェブサーバーを再読み込みまたは再起動して新しい HTTPS バーチャルホスト設定を使用します。
Certbot 証明書の自動更新
デフォルトでは、このロールは、選択した時刻にインストールされたすべての証明書を日に1回更新する cron ジョブを追加します。
証明書を実際には更新せずに自動更新をテストするには、次のコマンドを使用します:
/opt/certbot/certbot-auto renew --dry-run
完全なドキュメントとオプションについては、Certbot のウェブサイトを参照してください。
ライセンス
MIT / BSD
著者情報
このロールは、Jeff Geerling によって2016年に作成されました。彼は Ansible for DevOps の著者です。
Installs and configures Certbot (for Let's Encrypt).
ansible-galaxy install ussrlongbow.certbot