Let's Encrypt

Ubuntu + Nginx + Cloudflareを利用する設定をしていきます。事前にNginxの設定が完了していることを前提とします。

Certbotのインストール

まずsnapdをインストールします。

sudo apt update
sudo apt install snapd

更新します。

sudo snap install core
sudo snap refresh core

パッケージマネージャで過去にインストールされたCertbotを削除する

sudo apt remove certbot

Certbotをインストールします。

sudo snap install --classic certbot

パスを通します。

sudo ln -s /snap/bin/certbot /usr/bin/certbot

Cloudflare DNS Pluginのインストール

プラグインを信頼する設定をしてから、Cloudflare DNS Pluginをインストールします。

sudo snap set certbot trust-plugin-with-root=ok
sudo snap install certbot-dns-cloudflare

CloudflareのAPIキー発行

CloudflareのAPIトークンを発行します。 Cloudflareの管理画面右上のマイプロフィール→APIトークン→トークンを作成するをクリックします。 テンプレートから「ゾーンDNSを編集する」を選びます。 DNS:編集の権限を与えます。IPアドレスの制限も可能であれば設定します。 作成後表示されるトークンを保存します。必ずトークンのテストも行ってください。

mkdir ~/.secret
nano ~/.secret/cloudflare.ini

以下の内容を記述します。

dns_cloudflare_api_token="APIトークン"

権限を変更します。

chmod 600 ~/.secret/cloudflare.ini

証明書の取得

以下のコマンドを実行します。

sudo certbot certonly \
  --dns-cloudflare \
  --dns-cloudflare-credentials ~/.secret/cloudflare.ini \
  --agree-tos \
  --email support@naughty-ghost.org \
  -d example.com

以下の場所に証明書が保存されます。

/etc/letsencrypt/live/example.com/

証明書の削除

不要になった証明書を無効化した後、削除する場合

sudo certbot revoke --delete-after-revoke --cert-name example.com

自動更新

証明書の自動更新を行います。

sudo crontab -e

例として毎週日曜日に更新の確認を行います。

0 0 * * 0 certbot renew

Nginxに証明書を設定

証明書を設定します。

server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;

  server_name example.com;
  ssl_protocols TLSv1.2 TLSv1.3;

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

設定を反映します。

sudo nginx -t
sudo systemctl reload nginx

参考

Certbot Instructions | Certbot

Welcome to the Certbot documentation!

CloudflareのDNSを使ってCertbotで証明書を発行する

更新履歴