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.tech \
              -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で証明書を発行する

更新履歴