lego で Let's Encrypt の証明書を Route53 DNS 認証で取得する
Let's Encrypt を利用すると無料で SSL/TLS サーバ証明書を取得することが出来ます。 certbot
を使って証明書を取得する例をよく見かけますが、certbot
は意外とフットプリントが大きく作られています。 その点、Go 言語で実装された lego はフットプリントが小さい割に必要十分な機能が実装されており、扱いやすいです。 今回は lego を使って Amazon Route53 を使った DNS 認証により SSL/TLS サーバ証明書を取得する手順をメモしておきます。
インストール¶
Linux 系 OS であればインストールは簡単です。 具体的には以下のコマンドを実行するだけです。 現時点で lego はバージョン 0.4.1 までリリースされているのですが、0.4.1 で Route53 による DNS 認証を行うとエラーになってしまいます。 この問題を回避する為に、意図的にひとつ前のバージョンである 0.4.0 をインストールします。
1 2 3 4 5 6 7 |
|
証明書を取得する¶
証明書の更新処理を実施する為には Route53 のレコードを編集する権限が付与されている必要があります。 従って、lego を実行する EC2 インスタンスへ適用する IAM ロールには以下のような Policy を付与し、該当の DNS Zone を変更出来るようにしておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
用意が出来たら以下のように lego を実行します。 完了までしばらく時間がかかりますが、--path
オプションで指定したディレクトリに証明書や鍵が保存されます。
1 2 3 4 5 6 |
|
証明書を更新する¶
DNS 認証で証明書を更新するには以下のように実行します。 更新時は run
では無く、renew
を指定します。 Let's Encrypt は一定期間の間に証明書取得を試行出来る回数が決まっています。 この制限に抵触しないよう、「証明書の有効期限が xx 日を下回る場合のみ、更新処理を行う」には --day
オプションを指定します。 例えば --days 30
と指定した場合は「証明書の有効期限が 30 日未満の場合のみ、更新処理を行う」という振る舞いをします。
1 2 3 4 5 6 7 |
|