Let's Encryptでは、http://<your-domain>/.well-known/acme-challenge
にファイルを置いてドメイン所有権を確認する方法がよく取られますが、DNS認証でもドメイン認証することが可能です。
DNSroboCertでは、Lexicon という有名DNSプロバイダーのAPIを操作可能なライブラリを使って設定ファイルとDockerで80番ポートを開けたりインターネットに一時ファイルを公開せずに簡単にLet's Encrypt証明書の自動更新環境が作れます。
サポートしているDNSプロバイダーはこちら。
https://dnsrobocert.readthedocs.io/en/latest/providers_options.html#providers-options
使い方
以下にサンプルを用意しました。
https://github.com/naoa/ssl-with-dnsrobocert
非常にシンプルでDNSプロバイダーのトークンを取得し、configファイルにDNSプロバイダーの情報とドメインを記載し、Dockerで立ち上げるだけです。
以下のファイルの<your-email>
, <your-dns-provider>
, <your-dns-provider-token>
, <your-domain>
を書き換えます。
draft: false
acme:
email_account: <your-email>
staging: false
profiles:
- name: dns_profile
provider: <your-dns-provider> # choose your dns provider https://dnsrobocert.readthedocs.io/en/latest/providers_options.html#providers-options
provider_options:
auth_token: <your-dns-provider-token>
certificates:
- domains:
- <your-domain>
profile: dns_profile
- docker-composeで起動します。
ちなみに、DNS認証時には、自動的にDNSのゾーンにTXTレコードが追加されていることが確認できます。
docker-compose up -d
version: '3'
services:
dnsrobocert:
image: adferrand/dnsrobocert
container_name: dnsrobocert
volumes:
- /etc/letsencrypt:/etc/letsencrypt
- ./dnsrobocert:/etc/dnsrobocert
restart: always
これにより、/etc/letsencrypt/live
に証明書ができるのでそれをnginx等に利用することができます。
configファイルとdocker-composeで非常にシンプルに実現できるので、わざわざマルチホストにしたいという意図がなければ、nginx-proxyを使った方法よりシンプルに他のWebアプリ用のDockerに連携できそうです。