Amazon Linux2 でサクッとワイルドカードドメインの証明書を作成する

https://letsencrypt.org/images/le-logo-standard.png

id:kizashi1122 です。 LetsEncrypt でワイルドカードドメインの証明書を作ることがあり簡単にできたので記録しておきます。 弊社 masm11 の過去の記事である

blog.ingage.jp

と鬼のようにかぶってます。

前提

本記事では、「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 の証明書を使うつもりです。 その際はまた記事を投稿しようと思います。

ではまた。