m.estampie.work, blog.estampie.work… と個別に証明書を取っていたのですが面倒になってきたのでワイルドカード証明書を取ることにしました。またHTTP-01チャレンジで行っていたのでDNS-01チャレンジで取得してみます。

DNS-01チャレンジで証明書取得

サンプルはexample.comです。

既にcerbotはインストール済みのため、追加で必要なパッケージを取得します。

sudo apt-get update
sudo apt-get install python3-certbot-dns-cloudflare

CloudflareのダッシュボードでAPIトークンを取得しておきます。テンプレートから「ゾーン DNS を編集する」を選び、対象ドメインを指定します。

取得したら/etc/letsencrypt/cloudflare.iniファイルを作成してAPIトークンを記述します。

sudo vi /etc/letsencrypt/cloudflare.ini
sudo chmod 600 /etc/letsencrypt/cloudflare.ini

/etc/letsencrypt/cloudflare.ini

dns_cloudflare_api_token = APIトークン

元々example.comで証明書を取得していたのでワイルドカード証明書もcert-nameを同名で取得します。

sudo certbot certonly \
  --dns-cloudflare \
  --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \
  -d "*.example.com" \
  -d "example.com" \
  --cert-name example.com

完了したら下記コマンドで証明書を確認します。

sudo certbot certificates

ワイルドカード証明書でカバーできる不要な証明書は下記で削除します。

sudo certbot delete --cert-name blog.example.com

Nginxに記述してある証明書ファイルの場所ssl_certificate, ssl_certificate_keyを統一したcert-name example.comのものに置き換えます。

server {
    listen 443 ssl;
    server_name blog.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_verify_client off;
    ...
}

またHTTP-01チャレンジの際に必要だった/.well-known/へのアクセスの切り分けも不要になります。

書き換えたらNginxを再起動します。

sudo nginx -t
sudo systemctl reload nginx

以上で完了です。