スマートフォン・タブレットからインターネットサーバーオペレーション

APPW.jp
 

Certbot の webroot オプションによる Let's Encrypt の SSL/TLS 証明書取得

2026年以降、SSL/TLS証明書の有効期限が段階的に短縮されることが、決定されました。

これまで、個人で有償の有効期間約1年の証明書を利用してきましたが、今後の証明書有効期限の短縮と更新頻度の増加により、費用や管理の手間が大きくなることが予想されます。そこで、無料で証明書を提供し、自動更新機能を持つLet's Encryptを活用することにしました。

有効期間短縮の背景とスケジュール

SSL/TLS証明書の有効期間短縮は、セキュリティ向上を目的とした業界全体の動きです。CA/Browser Forum(認証局とブラウザベンダーで構成される業界団体)において、2025年4月11日にAppleの提案「Ballot SC-081v3」が承認され、以下のスケジュールで最大有効期間が短縮されます。

  • 〜2026年3月14日: 最長398日(約13ヶ月)
  • 2026年3月15日以降: 最長200日
  • 2027年3月15日以降: 最長100日
  • 2029年3月15日以降: 最長47日

また、証明書発行時に必要なドメイン認証情報(DCV)の再利用期間も段階的に短縮され、2029年3月15日以降は最大10日となる予定です。これにより、SSL証明書のセキュリティレベルは向上しますが、これまで以上に頻繁な更新作業への対応が求められることになります。

Let's Encrypt とは

Let's Encrypt は、非営利団体 Internet Security Research Group(ISRG)が運営する無料のSSL/TLS証明書認証局です。その最大の特徴は、ACME(Automatic Certificate Management Environment)というプロトコルを用いて、証明書の発行・更新・インストールを自動化できる点にあります。これにより、これまで手動で行っていた煩雑な証明書管理の負担を大幅に軽減できます。

証明書発行の流れとドメイン認証

Let's Encrypt で証明書を発行するに先立ち、申請者がドメインを所有・管理していることを証明する必要があります。これをドメイン認証(Domain Validation: DV)と呼びます。主な認証方法としては、以下の2つがあります。

  • HTTP-01チャレンジ: ウェブサーバーの特定のパスに、Let's Encrypt が指示するファイルを配置する方法。ウェブサイトがインターネットからアクセス可能である必要があります。
  • DNS-01チャレンジ: ドメインのDNSレコードに、Let's Encrypt が指示するTXTレコードを設定する方法。DNS設定を操作できる必要があります。

いずれかの方法で認証が完了すると、Let's Encryptは90日間有効なDV証明書を発行します。DV証明書(ドメイン認証証明書)は、SSL/TLS証明書の種類のうちのひとつです。有効期限が短いことはセキュリティの観点からも有利であり、後述する自動更新機能により、証明書管理の手間を大幅に軽減できます。

Certbot による証明書の取得と更新

Let's Encrypt の証明書は、最も広く利用されているACMEクライアントの一つである Certbot を用いることで簡単に発行・更新できます。Certbotは多くのLinuxディストリビューションで利用可能で、設定から更新までを自動化できる強力なツールです。

Ubuntu 24.04 LTS + Apache 2.4 環境での証明書発行

今回は、Ubuntu 24.04 LTS の Apache 2.4 の環境で、Certbot の webroot オプションを使用して証明書を作成します。Certbot を使った証明書の作成には、ほかに、自動でウェブサーバーの設定までを行う Nginx/Apache プラグインによる方法などがあります。

ウェブサーバーの自動設定を避けたい場合や、対応するプラグインがない場合は、この webroot オプションを使用します。この場合、Certbot は指定されたウェブサイトのドキュメントルート(例: /var/www/html)に認証ファイルを作成します。


$ sudo apt update
$ sudo apt install certbot
$ sudo certbot certonly --webroot -w /var/www/html -d example.com -d www.example.com
  • -w /var/www/html: ドキュメントルートの指定
  • -d example.com: 対象ドメインの指定(複数指定可能)
  • --cert-name example.com: 証明書名(省略すると最初の -d オプションに指定しているドメイン名が証明書名となります。)

このコマンドでは、ウェブサーバー設定の自動変更は行われません。取得された証明書は通常 /etc/letsencrypt/live/example.com/ にシンボリックリンクとして保存されます。

なお、Apacheと連携するためのプラグインをインストールする場合は次のようになります。このプラグインを利用した場合、ウェブサーバーの設定は自動で変更されます。


$ sudo apt install certbot python3-certbot-apache

証明書ファイルの例

取得された主な証明書ファイルは以下の通りです。

  • fullchain.pem: サーバー証明書と中間証明書が連結されたファイル。
  • privkey.pem: 秘密鍵ファイル。

Apache 設定例

取得した証明書を Apache に設定するには、VirtualHost 設定に以下の行を追加します。

<VirtualHost *:443>
    ServerName example.com
    DocumentRoot /var/www/html

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    # その他必要な設定...
</VirtualHost>

Apache が証明書ファイルへアクセスできなかった場合、/etc/letsencrypt 以下のディレクトリ権限を適切に設定する必要があります。

自動更新とその運用

Let's Encrypt の証明書は90日間有効であるため、Certbot は通常、自動更新が設定されています。


$ sudo certbot renew

このコマンドは手動実行も可能ですが、Certbot は通常、/etc/cron.d/certbot に自動更新ジョブを登録します。 これにより、1日2回の頻度で自動更新が試行され、有効期限が30日を切った証明書のみが更新対象となります。


$ sudo cat /etc/cron.d/certbot

更新状況の確認には、ログファイル /var/log/letsencrypt/letsencrypt.log を参照します。

テスト更新(ドライラン)

本番環境で実際に更新を行う前に、設定が正しく機能するかをテストするために、ドライランオプションを使用できます。


$ sudo certbot renew --dry-run

このコマンドにより、実際の証明書の更新は行わず、設定やLet's Encryptサーバーとの通信が正常に行えるかを確認できます。

『Certbot の webroot オプションによる Let's Encrypt の SSL/TLS 証明書取得』を公開しました。