はじめに
Let’s Encrypt の証明書ツールである Certbot は、HTTP / DNS /TLS のいずれかの方法で認証を行う構造となっています。
https://letsencrypt.org/ja/docs/challenge-types/
通常は HTTP が最も簡便ではありますが、ワイルドカード証明書を取得したい場合や、HTTP サーバーを使用できない環境では DNS を使用する必要があります。
しかしながら、DNS の方法はデフォルトでは自動更新ができません。
なぜなら、DNS サーバーに認証用のレコードを書き込む・更新する必要があるにも関わらず、DNS のレコードを自動更新するのは容易ではないためです。多くの場合は管理UIを自動操作するかAPIを使用するプログラムを書く必要があります。大変すぎます。
そのため、certbot には様々な DNS サービスの認証を容易にするプラグインが提供されています。
※ 内部的にはDNS提供会社のAPIを使用する構成となっていることが多いです。
今回、Cloudflare のプラグインで自動更新を試みてみました。
手順
Cloudflare 側の作業
Cloudflare にログイン
まずはCloudflareにログインします。
Just a moment...
右上のアイコン→プロフィール

APIトークン → トークンを作成する

ゾーンDNSを編集するテンプレートを選択

ゾーンリソースを指定
セキュリティ対策として、すべてのゾーンではなく、指定ゾーンのみを指定しておきます。

トークンを作成

トークンをコピー
トークンが作成されたらトークンをコピーしてメモしておきます。

サーバー側の作業
サーバー側で以下のコマンドを実行します。
ドメインやAPIトークンなどは適宜書き換えてください。
トークンファイルの作成
sudo mkdir -p /root/.cloudflare
sudo touch /root/.cloudflare/example.com.ini
echo 'dns_cloudflare_api_token=[APIトークン]' | sudo tee /root/.cloudflare/example.com.ini
sudo chmod 700 /root/.cloudflare
sudo chmod 600 /root/.cloudflare/example.com.ini
証明書の更新
sudo certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials /root/.cloudflare/example.com.ini \
-d dns.example.com \
-m [自分のメールアドレス] \
--agree-tos \
--non-interactive
エラーが無ければOKです。
参考資料
certbotプラグインに対応しているリストは以下のページに掲載されています。
日本企業だとConoHaなどが対応しています。

DNS providers who easily integrate with Let's Encrypt DNS validation
In the spirit of Web Hosting who support Let's Encrypt and CDN Providers who support Let's Encrypt, I wanted to compile ...
コメント
差し出がましい指摘で恐縮ではありますが、誤字の指摘です。
誤: Cloudfrare
正: Cloudflare
ブログ記事本文や見出しやURLにある、Cloudflareのスペルを誤っています。
コードに記述されたスペルは正しいです。
なお Flare のスペルは、僕もよく間違えます。音韻体系由来の英単語は、口に出さないと記述を取り違えますよね……。