以前に以下のメモを書きました。
lego を使えば certbot をインストールすること無く、Let's Encrypt の証明書を取得出来ますので非常に手軽です。 lego のバージョンは前回のメモ時点で 2.6.0 だったのですが、現時点の最新は 4.0.1 の為、改めてメモを書き直しておきます。 但し、バージョンによる差異が全く無い為、手順は全く同じです。 また、メモの最後にワイルドカード証明書を発行 / 更新する場合のメモを追加しておきました。
前提条件
今回は以下の環境で作業しました。
- AWS EC2 上に作成した AmazonLinux2
IAM ポリシーの作成
以下の内容で IAM ポリシーを新規作成します。 <INSERT_YOUR_HOSTED_ZONE_ID_HERE>
部分は Route53 の管理画面で該当 DNS Zone 情報から取得します。 IAM ポリシーを作成したら、それを参照するロールを作成し、更にそれを参照するように EC2 インスタンスを設定します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"route53:GetChange",
"route53:ListHostedZonesByName",
"route53:ListResourceRecordSets"
],
"Resource": [
"*"
]
},
{
"Effect": "Allow",
"Action": [
"route53:ChangeResourceRecordSets"
],
"Resource": [
"arn:aws:route53:::hostedzone/<INSERT_YOUR_HOSTED_ZONE_ID_HERE>"
]
}
]
}
インストール
AmazonLinux2 上で lego をインストールします。
mkdir tmp
cd tmp
wget https://github.com/go-acme/lego/releases/download/v4.0.1/lego_v4.0.1_linux_amd64.tar.gz
tar zxvf lego_v4.0.1_linux_amd64.tar.gz
mv lego /usr/local/bin/
chmod 755 /usr/local/bin/lego
chown root:root /usr/local/bin/lego
サーバ証明書を取得する
lego を使い、サーバ証明書を取得します。 IAM ポリシーが適切に設定され、EC2 インスタンスから該当 DNS Zone へ必要なアクセスが出来ていれば、じき終了するはずです。
/usr/local/bin/lego \
--accept-tos \
--path=/etc/letsencrypt \
--email="email@example.com" \
--dns="route53" \
--domains="www.example.com" \
run
サーバ証明書を更新する
サーバ証明書を更新するには renew
を指定します。 また、十分な有効期限が残っているサーバ証明書は無駄に更新処理を行わないよう、--days 30
オプションを指定し、「有効期限が 30 日未満の証明書のみ、更新処理を行う」ように設定します。 あとはこの処理を cron 等で定期実行させます。 --days
オプションは renew
よりも後ろに指定します。
/usr/local/bin/lego \
--accept-tos \
--path=/etc/letsencrypt \
--email="email@example.com" \
--dns="route53" \
--domains="www.example.com" \
--days 30 \
renew
ワイルドカード証明書を発行 / 更新する場合
ワイルドカード証明書を発行する場合は --domains
オプションに *.example.com
を含めます (ドメイン部分は実際のドメインに合わせます)。
/usr/local/bin/lego \
--accept-tos \
--path=/etc/letsencrypt \
--email="email@example.com" \
--dns="route53" \
--domains="www.example.com" \
--domains="*.example.com" \
run
同様に、ワイルドカード証明書を更新する場合は以下を実行します。
/usr/local/bin/lego \
--accept-tos \
--path=/etc/letsencrypt \
--email="email@example.com" \
--dns="route53" \
--domains="www.example.com" \
--domains="*.example.com" \
--days 30 \
renew
コメント