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
が生成されます。