💡

Let's Encrypt 証明書発行でつまずいたこと①

2024/12/31に公開

環境

  • AWS EC2
  • Ubuntu22.04
  • WebサーバーはApache

注意点

  • WebサーバーがApacheでない場合は今回の記事は参考になることはないと思います。
  • Apacheは必ず起動しておくこと。

概要

初めに試したコマンド

  • Linux環境でLet's Encrypt証明書を発行しようとしました。検証で下記のコマンドを実施しました。
certbot certonly --agree-tos --apache -w /var/www/html/example -d example.com
  • 結果、下記のように失敗するのですが。
Some challenges have failed.

コマンドの各オプションの説明

certbot

  • Let's Encryptの証明書を管理するためのコマンドラインツール。

certonly

  • 証明書を「取得するだけ」で、サーバーの設定(例えば自動的なSSL設定変更)は行いません。取得した証明書を手動で設定する場合や、設定を独自に管理したい場合に使用します。

--agree-tos

  • Let's Encryptの利用規約(Terms of Service)に自動的に同意します。対話プロンプトをスキップするためのオプションです。

--apache

  • Apacheサーバーを使用して証明書を取得します。Apacheの設定ファイルを自動的に検出し、必要な操作(例: ドメインの検証用ファイルの配置)を行います。

-w /var/www/html/example

  • "-w"はウェブルート(Webroot)の指定を意味します。Let's Encryptがドメインの所有権を確認するため、指定したディレクトリに検証用ファイルを配置します。
  • "/var/www/html/example"はドメイン"example.com"のドキュメントルートを指しています。Apacheサーバーを利用してこの検証ファイルが正しく提供されているかを確認します。所有権の確認が成功すると、証明書が発行されます。発行された証明書は通常、"/etc/letsencrypt/live/example.com/"に保存されます。

-d example.com

  • 証明書を取得する対象のドメインを指定します。ここでは"example.com"の証明書を取得します。
  • 複数のドメインを指定する場合、スペースで区切って、"-d"を繰り返します。
-d example.com -d www.example.com

次に試したコマンド

  • 下記のコマンドを実施しました。オプションを"--apache"から"--webroot"から変更。
certbot certonly --webroot -w /var/www/html/example -d example.com
  • 再度、失敗します。
Some challenges have failed.

オプション"--apache"とオプション"--webroot"の違い

項目 --webroot --apache
サーバー依存性 サーバーソフトに依存しない Apache専用
所有権検証方法 ウェブルートに検証ファイルを配置する Apache設定を変更して所有権を検証する
サーバー設定 手動で管理(設定は変更されない) 設定を自動的に検出・変更可能
ダウンタイム 発生しない 一時的なリロードが発生する可能性あり
SSL設定 証明書取得後に手動で設定 証明書取得後、自動でApacheに設定可能

再度、Apacheオプションでコマンドを実行

  • 再度、コマンドを実施しました。
certbot certonly --agree-tos --apache -w /var/www/html/example -d example.com
  • そうすると成功しました!!
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/example.com/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/example.com/privkey.pem
This certificate expires on 2025-03-17.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 * Donating to EFF:                    https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

結論

  • WebサーバーがApacheである場合にLet's Encryptの証明書の発行が少し複雑なので結論をまとめます。
  1. 最初"--apache"オプションで失敗したら、"--webroot"オプションでわざと失敗させて、再度"--apache"オプションを試す。
  2. 最初"--webroot"オプションで失敗したら、"--apache"オプションを試す。

私から

  • Let’s Encryptの操作も5回失敗すると、その後24時間以内に新規発行等ができなくなるので、発行前に"--dry-run"オプションでステータスを試してから、発行してください。成功のステータスであれば、新規発行等していいです!!
  • 成功例
certbot certonly --agree-tos --apache -w /var/www/html/example -d example.com --dry-run
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Simulating a certificate request for example.com
The dry run was successful.
  • 失敗例
certbot certonly --agree-tos --apache -w /var/www/html/example -d example.com --dry-run
(省略)
Some challenges have failed.
ヘッドウォータース

Discussion