ACMEクライアントツール(certbot)によるサーバ証明書管理手順(利用管理者向け)

ACMEクライアントツール(certbot)によるサーバ証明書管理手順(利用管理者向け)

改版履歴

版数

日付

内容

担当

V.1.0

2025/10/10

初版

NII

V.2.0

2026/03/25

ACMEクライアントツールごとにページを分割

NII

V.2.1

2026/04/13

Apache / Nginxプラグインの記述を追加

NII



目次

1. はじめに

このページは、Linuxサーバ上でcertbotを用いてサーバ証明書を発行・更新・失効・削除するための実務手順をまとめたものです。
certbotはサーバ上で実行するコマンドラインツールで、Apache / Nginx 等のWebサーバと連携してACMEプロトコルにより証明書の取得と更新を自動化できます。

certbotの詳細なマニュアルについては、下記公式マニュアルをご参照ください。
User Guide — Certbot 5.5.0 documentation

2. 前提条件

2-1. 実行環境

  • Linuxサーバ
    certbotはLinux等のサーバ上で実行します。
    多くの操作は設定ファイルや 80/443番ポートへのバインドを伴うため、管理者権限(root / sudo)での実行が前提です。
    個人のPCではなく、運用対象のWebサーバで実行してください。

  • HTTP-01を使う場合、外部からTCP80番に到達できる環境

  • DNS-01を使う場合、手動またはDNSプロバイダAPI経由のプラグインを使用して、対象ドメインのDNS TXTレコードを設定できる環境

ACME サーバはHTTP-01検証において、外部からTCP80番ポートで到達可能であることを確認します。
certbotにはローカルで待ち受けるポート番号を変更するための--http-01-portオプションがありますが、
CAがアクセスする公開側のポート番号は80に固定されており、別の値に変更することはできません。
そのため、80番ポートを開放できない環境では、DNS-01検証方式の利用を検討してください。

3. certbotのインストール手順

3-1. snapによるcertbotインストール(推奨)

最新版の入手が容易で、自動更新(systemd timer)も事前設定済み、かつ多くのsystemd採用ディストリで利用可能です。

snapdが未導入の場合、ディストリに応じてインストールしてください。

  • Debian系(Ubuntuなど)
    コマンド例

    sudo apt update sudo apt install snapd -y

     

  • Redhat系(RHEL, CentOS, AmazonLinuxなど)
    コマンド例

    sudo dnf install epel-release -y sudo dnf install snapd -y sudo systemctl enable --now snapd.socket

certbotのインストール

sudo snap install --classic certbot sudo ln -s /snap/bin/certbot /usr/bin/certbot certbot --version

 

※ディストリごとの詳しい手順は、Certbot Instructions をご参照ください。

3-2. OS パッケージからのインストール

  • Debian系(Ubuntuなど)
    コマンド例

    sudo apt update # Apacheを利用している場合 sudo apt install certbot python3-certbot-apache -y # Nginxを利用している場合 sudo apt install certbot python3-certbot-nginx -y

    ※上記のうち、ご利用の環境環境に合わせてどちらか一方を実行してください。

  • Redhat系(RHEL, CentOS, AmazonLinuxなど)
    コマンド例

    # epel-releaseを有効化 sudo dnf install epel-release -y # Apacheを利用している場合 sudo dnf install certbot python3-certbot-apache # Nginxを利用している場合 sudo dnf install certbot python3-certbot-nginx

    ※上記のうち、ご利用の環境環境に合わせてどちらか一方を実行してください。

4. certbotによるサーバ証明書管理手順

本章では利用管理者のcertbotによるサーバ証明書の各種手続きの流れについて記述します。
登録担当者による利用管理者へのACMEプロトコル認証情報(EAB)通知済みで、サーバ証明書の新規発行が必要な場合は「証明書新規発行」を行ってください。
既にサーバ証明書を本システムから発行していて、サーバ証明書の更新、失効された証明書の再発行を行う場合は「証明書更新発行」を行ってください。
サーバ証明書の失効を行う場合は「証明書失効」を行ってください。

EAB Key IDおよびHMAC秘密鍵はACMEアカウント認証のための秘密情報(アカウント鍵)です。
厳重に取り扱ってください。

手続きの種別

手続きを行う主な機会

証明書新規発行
(4-1.サーバ証明書の新規申請手続き)

 

新規にサーバ証明書の発行を必要とする場合。

サーバ証明書の記載内容(主体者DN)を変更する場合。

証明書更新発行
(4-2.サーバ証明書の更新申請手続き)

 

 

 

サーバ証明書の(主体者DN以外の)記載内容を変更する場合。

有効期限内の証明書を強制的に再発行したい場合。

失効されたサーバ証明書の再発行を行う場合。

証明書失効
(4-3.サーバ証明書の失効申請手続き)

サーバ証明書が不要になった場合や秘密鍵が危殆化した場合。

4-1. サーバ証明書新規発行手続き概要

 

本章では利用管理者のサーバ証明書新規発行手続きの流れについて記述します。
利用管理者は以下の手続きにより証明書の新規申請・取得を行います。

certbot発行.png

 

4-1-1. 証明書発行

  1. certbotを実行し、ACMEアカウントを作成します。

    sudo certbot register --debug -vvv --server 'https://secomtrust-acme.com/acme/' --eab-kid xxxxxxxxxxxx --eab-hmac-key xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --agree-tos -m email@example.com --no-eff-email
    • --debug … certbotの実行時に追加のデバッグ情報を表示します

    • -vvv … certbotのログ出力レベルを最大にします

    • --server … certbotが接続するACMEサーバーのURLを指定します

    • --eab-kid … KeyIDを指定します(設定値は登録担当者から通知されます)

    • --eab-hmac-key … HMAC秘密鍵を指定します(設定値は登録担当者から通知されます)

    • --agree-tos … 利用規約に同意します

    • -m … 証明書発行に関する通知を受け取るためのメールアドレスを指定します

    • --no-eff-email … EFF(certbot開発元)からのメール配信を拒否します

  2. certbotを実行し、サーバ証明書を発行します。
    ACMEによるドメイン所有証明はRFC8555に基づき、以下の2方式のいずれかで認証が行われます。
    HTTP-01はHTTP通信によるドメインの所有証明、DNS-01は、TXTレコードによるドメイン所有証明を行います。
    ドメインを所有しているが、HTTP通信は行えない場合(ファイアウォールの影響やサーバが外部通信を行えないなど)は、DNSレコードによる所有証明を選択してください。
    既にサーバへのAレコード紐付けがされており、HTTP(S)リクエストを受信できる状態にしてあれば、HTTP-01を選択してください。
    デフォルトはクライアントツールによりますが、通常はHTTP-01が推奨されています。


    ◆HTTP-01
    Apache / Nginxプラグインを利用(推奨)
    certbotのApache / Nginxプラグインを利用すると、以下が自動化されます。
    使用可能な環境であれば、こちらの利用を推奨します。
    ・ACME認証用設定の自動追加
    ・Webサーバ設定の検証(configtest)
    ・必要なリロードの自動実行
    ・マルチドメイン(ドメイン複数指定)時の設定を自動調整

    Apacheの場合(単一ドメインの場合。マルチドメインは後述)

    sudo certbot --apache -d example.com --key-type rsa --server 'https://secomtrust-acme.com/acme/'

     

    Nginxの場合(単一ドメインの場合。マルチドメインは後述)

    sudo certbot --nginx -d example.com --key-type rsa --server 'https://secomtrust-acme.com/acme/'

     

    • -d … 対象ドメインを指定します

    • --key-type rsa … 使用する暗号鍵のアルゴリズムをRSAに指定します
      ECDSAを使用する場合は、--key-type ecdsaを指定します

    • --server … certbotが接続するACMEサーバーのURLを指定します


    Webrootを指定する場合
    既存のWebサーバを停止せず、指定したWebroot(DocumentRoot)配下へcertbotが認証ファイルを自動配置します。
    この方式ではWebサーバが外部からHTTP(80)でアクセス可能であることが前提です。
    HTTP‑01を既存Webサーバで利用する場合、必ず--webroot-w <Webrootパス>オプションを指定してください。
    Webrootのパスは環境(Docker / 仮想ホスト / カスタムDocumentRoot)によって異なるため、
    運用対象のWebサーバで実際に公開しているDocumentRootを指定してください。
    必要に応じてWebサーバ(Apache / Nginx)側で、以下のパスが外部公開されるよう設定してください。
    <webroot>/.well-known/acme-challenge/

    単一ドメインの例。マルチドメインは後述。

    sudo certbot run --webroot -w /path/to/your/webroot -d example.com --key-type rsa --server 'https://secomtrust-acme.com/acme/'
    • --webroot … Webサーバのドキュメントルート(webroot)へ認証ファイルを配置する方式を指定します

    • -w … 認証ファイルを配置するWebサーバのドキュメントルートのパスを指定します


    ◆DNS-01
    DNSプラグイン方式(推奨)
    certbotには主要DNSプロバイダ向けのプラグインがあり、DNS‑01のTXTレコード設定を自動化できます。
    例:AWS Route53の場合(単一ドメインの場合。マルチドメインは後述)

    sudo certbot certonly --dns-route53 -d example.com --key-type rsa --server 'https://secomtrust-acme.com/acme/'

     

    各プロバイダ向けオプションの一覧は下記のページをご参照ください。
    DNS Plugins | certbot/certbot | DeepWiki


    手動(非推奨)
    自動化プラグインが利用できないDNSサービスの場合に限り、手動でTXTレコードを追加する方法があります。

    ただしこの方法では自動更新できず、更新スケジュールでも毎回手動作業が必要になるため非推奨です。原則DNSプラグイン方式を使用してください。

    sudo certbot run --manual --preferred-challenges dns -d example.com --key-type rsa --server 'https://secomtrust-acme.com/acme/'
    • --manual … DNS-01でTXTレコードを手動追加して認証したい場合に利用します

    • --preferred-challenges dns … DNSチャレンジ(DNS-01)を優先して使用することをcertbotに指示します

     

    実行中にcertbot が要求する値(下図の赤枠)を、DNS TXTレコードに設定します。

    NII_ACME.png

     

    _acme-challenge.example.com. 300 IN TXT "xxxxxxxxxxxxxxxxxxxx"


    ◆マルチドメインを使用する場合
    複数のドメイン名に対して同一の証明書を発行する場合、-dオプションを複数指定します。
    ドメインの指定順は任意ですが、最初に指定したドメインが証明書のCommon Name(CN)として使用されます。
    画面上のコマンドには一番最初のドメインのみ出力されますが、後述のコマンド例に倣い、対象のドメイン全てをオプションで指定する必要がございます。
    対象のドメインをご確認の上、実行をお願いいたします。
    また、各認証方式(HTTP‑01 / DNS‑01)の手順は単一ドメインの場合と同様ですが、すべてのドメインでACME認証が成功する必要があります。


    ●HTTP‑01でマルチドメイン証明書を発行する場合
    HTTP‑01 の場合、すべての対象ドメインが外部からHTTP(80)でアクセス可能であることが前提となります。

    a. Apache / Nginxプラグインでのマルチドメイン
    -dを複数指定するだけで対応できます。

    Apacheの場合
    対象ドメイン:example.com, www.example.com

    sudo certbot --apache -d example.com -d www.example.com --key-type rsa --server 'https://secomtrust-acme.com/acme/'


    Nginxの場合
    対象ドメイン:example.com, www.example.com

    sudo certbot --nginx -d example.com -d www.example.com --key-type rsa --server 'https://secomtrust-acme.com/acme/'


    b.Webrootを指定している場合
    別々のDocumentRootを持つ場合は、ドメインごとに-wを対応させる必要があります。

    単一Webrootの場合(すべてのドメインで同じWebrootを使用)
    対象ドメイン:example.com, www.example.com, sub.example.net

    sudo certbot run --webroot -w /path/to/your/webroot -d example.com -d www.example.com -d sub.example.net --key-type rsa --server 'https://secomtrust-acme.com/acme/'


    ドメインごとにWebrootが異なる場合
    対象ドメイン:example.com, www.example.com, sub.example.net

    sudo certbot run --webroot -w /var/www/siteA -d example.com --webroot -w /var/www/siteB -d www.example.com --webroot -w /var/www/siteC -d sub.example.net --key-type rsa --server 'https://secomtrust-acme.com/acme/'

     

    ●DNS‑01でマルチドメイン証明書を発行する場合
    DNS‑01の場合は、-dを複数指定するだけで対応できます。
    DNSプラグインを使用する場合、各ドメインのTXTレコードが自動作成されます。
    例:AWS Route53の場合
    対象ドメイン:example.com, sub.example.com, another-domain.net

    sudo certbot certonly --dns-route53 -d example.com -d sub.example.com -d another-domain.net --key-type rsa --server 'https://secomtrust-acme.com/acme/'

     

  3. 自動更新について
    環境ごとに異なります。
    Debian系(Ubuntuなど) あるいは snapをご利用の場合:
    多くの環境でsystemd timer(certbot.timerなど)が既定で有効化されており、1日2回の定期チェックが実行されます。
    このチェックにより、有効期限が残り30日以内、または有効期間の三分の一以下となった場合に、自動的に更新が行われます
    重複実行を避けるため、cronと併用しないでください

    Redhat系(RHEL, CentOS, AmazonLinuxなど):
    自動起動が無効になっていることがあります。次で有効化を行ってください

    sudo systemctl enable --now certbot-renew.timer sudo systemctl list-timers | grep certbot

    ※ユニット名はディストリによりcertbot.timer または certbot-renew.timer の場合がございます。

renew(更新)が成功しても、Webサーバはリロードするまで古い証明書を保持します。

deploy‑hookあるいは更新フックスクリプトで自動リロードを登録してください(いずれか一方でOKです)。
コマンド例はNginxの場合です。Apacheの場合、nginxapache2に変更してください。

 

deploy-hook

sudo certbot renew --deploy-hook "systemctl reload nginx"

 

フックスクリプト
下記スクリプトをetc/letsencrypt/renewal-hooks/deploy/myhook.shに配置してください。

#!/usr/bin/env bash set -euo pipefail echo "Hook executed at $(date)" sudo systemctl reload nginx

実行権限を必ず付与してください。

sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/myhook.sh

 

4-2. サーバ証明書の更新申請手続き

 

本章では利用管理者のサーバ証明書更新手続きの流れについて記述します。
利用管理者は以下の手続きにより証明書の更新申請・取得を行います。

certbot更新.png

 

4-2-1. 証明書更新

  1. certbotを実行し、サーバ証明書を更新します。

    sudo certbot renew --key-type rsa
    • --key-type rsa … 使用する暗号鍵のアルゴリズムをRSAに指定します

※renewコマンドは、一度certbotによる証明書ダウンロードまでが成功した後に実行可能で、前回の選択や設定がそのまま引き継がれて証明書発行を実施します。
更新のスケジュールについては、「4-1-1. certbot実行による証明書発行」の「3.自動更新について」にある自動更新設定を実施してください。
また、certbotは証明書有効期限の残り期間が規定値以上(通常は30日)の場合、証明書発行をスキップします。
そのため、有効期限が30日以上ある証明書を強制的に更新したい場合には、以下を実行してください。

sudo certbot certonly --force-renewal --key-type rsa

--force-renewal を付けると、有効期限に関係なく無条件で新しい証明書を発行します。

4-3. サーバ証明書の失効申請手続き

 

本章では利用管理者のサーバ証明書失効手続きの流れについて記述します。
利用管理者は以下の手続きにより証明書の失効申請を行います。

certbot失効.png

 

4-3-1. 証明書失効

  1. certbotを実行し、サーバ証明書を失効します。

    sudo certbot revoke --server 'https://secomtrust-acme.com/acme/' --cert-name example.com
    • --server … certbotが接続するACMEサーバーのURLを指定します

    • --cert-name … 証明書の名前を指定します


    証明書名(--cert-name)の確認方法
    --cert-nameには、certbotが管理している「Certificate Name」を指定する必要があります。
    現在登録されている証明書一覧は、以下のコマンドで確認できます。

    sudo certbot certificate

    上記の出力に以下のように表示されるCertificate Name: xxxxが対象の証明書名です。
    出力例:

    Certificate Name: example.com Serial Number: ... Domains: example.com www.example.com Expiry Date: ...

     

  2. データの削除
    certbot revoke はCAへの失効申請です。
    そのため、これだけではローカルの証明書ラインエージ(更新設定)が残り、次回certbot renew不要な更新を試行することがあります。
    最後に削除(delete)まで行うようにしてください。

    sudo certbot delete --cert-name example.com

    このコマンドにより、対象ドメインの以下のデータが安全に削除されます。

    • /etc/letsencrypt/live/<cert-name>/

    • /etc/letsencrypt/archive/<cert-name>/

    • /etc/letsencrypt/renewal/<cert-name>.conf