id:kizashi1122 です。 LetsEncrypt でワイルドカードドメインの証明書を作ることがあり簡単にできたので記録しておきます。 弊社 masm11 の過去の記事である
と鬼のようにかぶってます。
前提
本記事では、「example.com および *.example.com に対する証明書を取得する」という目的になります。証明書を取得するところまで、です。Webサーバーへの設定は含みません。
前提として、example.com のドメインを所有しており、DNS は Route53 で管理しているものとします。
EC2 起動
Amazon Linux2 のEC2インスタンスを起動します。t2.micro でよいでしょう。
IAM Role の設定
上記記事では aws key/secret を /root/.aws/credentials に配置するパターンで紹介していましたが、キーは発行してしまうと管理も大変になるので、今回は IAM Role を作って、EC2 インスタンスに紐付けるというやり方でやってみましょう。 順番的には、ポリシーを作成してからロールを作成します。ロール作成時に先に作ったポリシーを設定することになります。
ポリシーの作成
以下の JSON でポリシーを作成します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "route53:GetChange", "route53:ListHostedZones" ], "Resource": "*" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "route53:ChangeResourceRecordSets", "Resource": "arn:aws:route53:::hostedzone/<対象ドメインの Hosted zone ID>" } ] }
名前は letsencrypt-route53-policy
とでもしておきましょうか。
ロールの作成
- ロールの作成
- AWS Service -> EC2 を選択して、次へ
- 先程作成した
letsencrypt-route53-policy
を選択して次へ、次へ - 名前は適当に
letsencrypt-route53-role
とつけて作成完了
EC2にロールをアタッチする
マネジメントコンソールからできます。
- 対象のEC2インスタンスを選択肢 Actions
-> Security
-> Modify IAM role
を選択
- 先程作成したロール letsencrypt-route53-role を選択して保存
以上です。
必要プログラムの取得
以下、 ec2-user
にて実行します。
sudo wget -r --no-parent -A 'epel-release-*.rpm' http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/ sudo rpm -Uvh dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-*.rpm sudo yum-config-manager --enable epel* sudo yum install certbot -y sudo yum install python2-certbot-dns-route53 -y
yum で全部揃うんですね。
証明書の発行(最初)
sudo certbot --debug certonly \ --server https://acme-v02.api.letsencrypt.org/directory \ --email 'developer@example.com' \ --agree-tos \ --no-self-upgrade \ --dns-route53 \ -d \*.example.com \ -d example.com
しばらくすると
- /etc/letsencrypt/live/example.com/fullchain.pem
- /etc/letsencrypt/live/example.com/privkey.pem
が作成されます。 fullchain.pem
にはサーバ証明書と中間証明書が concat されています。 privkey.pem
は秘密鍵となります。
簡単ですね。
ただし有効期限は3ヶ月なので3ヶ月おきに更新する必要があります。2ヶ月を経過するまでは
Cert not yet due for renewal
と言われてしまいますが、2ヶ月を経過すると更新できます。その際はコマンドはもっとシンプルになります。
sudo certbot --no-self-upgrade --debug renew
今は諸事情があって letsencrypt を使っていますが、今後は Amazon の証明書を使うつもりです。 その際はまた記事を投稿しようと思います。
ではまた。