まーぽんって誰がつけたの?

iOS→Scala→インフラなおじさん技術メモ

AWS Route53を使ってDNS-01でLet's Encryptの証明書を取得する

DNS-01方式

HTTPを利用して認証する場合に、IP制限や社内のみの通信などの制限をしている環境においてはLet's Encrypt側からの通信が届かないので認証できません。そこでDNSのTXTレコードで認証するDNS-01のタイプがあります。

こちらのサイトの説明がわかりやすかったです。

Let's EncryptのDNS-01を使用して無料のSSL証明書をWebサーバなしで取得する -- ぺけみさお

公式のcertbotが対応した

先ほどの記事執筆時点では以下のように書いてありましたが、

現在、Let’s Encrypt公式のletsencryptコマンドは、DNSによる認証をサポートしていません。 GitHubでプルリクエストはされていますが、まだマージされていません。

現在はマージされ使えるようになっていました!!

Dockerでcertbotを動かして生成する

こういうとき便利、Docker

Dockerfileはこんな感じで

FROM certbot/certbot

RUN pip install certbot-dns-route53

COPY run.sh run.sh
RUN chmod +x run.sh

ENTRYPOINT ["/opt/certbot/run.sh"]

中身のrun.sh

#!/bin/sh

certbot certonly -n --agree-tos \
  --email <your email address> \
  --dns-route53 -d ${DOMAIN}

実行コマンドはこう

$ DOMAIN=<yourdomain.example.com>
$ docker run -e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \
  -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \
  -e DOMAIN=$DOMAIN \
  -v $PWD:/etc/letsencrypt dns-certbot

これでカレントディレクトリ配下に$PWD/live/${DOMAIN}/private.pem$PWD/live/${DOMAIN}/fullchain.pemが生成されます。