Let's Encryptを使ってWebサイトをHTTPS化する際、Certbotというツールを使うのが一般的です。
本記事では、特にWebroot認証において、Certbotが裏側でどのような処理を行っているのかを整理します。
そもそもWebroot認証とは?
認証局(ここでいうLet's Encrypt)が指定したパスにサーバーが特定のファイルを置くことで、ドメインの所有者であることを証明する方式
認証局は、そのファイルにHTTP経由でアクセスして検証します。
前提条件
80番ポートの解放と、Let's Encryptとサーバーがやり取りするためにもDNS設定をしていることが必要です。
認証の全体的な流れ
1. Certbotが「このドメインの証明書が欲しい」とLet's Encryptに依頼
2. Let's Encryptが「このトークンをこのURLに置いて」と指示
3. Certbotがその内容のファイルをWebサーバの公開ディレクトリに作成
4. Let's EncryptがそのURLにHTTPでアクセス
5. アクセス成功 → 所有者認定 → 証明書発行
🔧 Certbotがやっていること【内部処理】
コマンド例:
sudo certbot certonly --webroot -w /var/www/html -d example.com
このとき Certbot は以下の処理を自動で行います。
1. Let's Encryptに接続しリクエスト
- Certbot は Let's Encryptに「example.com の証明書が欲しい」とHTTPS経由でリクエストを送る。
- Let's Encrypt は「所有者確認のためのチャレンジ(Webrootにファイルを置いてね)」を返してくる。
2. トークンファイルの作成
- 指示されたファイル名と中身を元に、以下のようなファイルを作成:
/var/www/html/.well-known/acme-challenge/<トークン>
- 中身には署名付きのトークンが含まれる
3. HTTPアクセスによる確認待ち
-
Let's Encrypt が実際に
http://example.com/.well-known/acme-challenge/...
にアクセス -
正しく応答すれば OK、証明書を発行できる状態になります
80番ポートでアクセス可能にしている必要があるのはここで使う為です。
4. 証明書の取得と保存
認証に成功すると、CertbotはLet's Encryptに対して証明書の発行をリクエストし、発行された証明書データを受け取ります。
受け取った証明書一式を/etc/letsencrypt/live/example.com/
に保存:
fullchain.pem
privkey.pem
cert.pem
なぜこれで所有者確認ができるのか
Webroot 認証では以下が確認できます:
- DNS設定が正しく、
example.com
が自分のサーバに向いている - サーバの公開ディレクトリにファイルを置ける(操作権限がある)
つまり、「ファイルを置ける」という事実そのものがドメインの所有証明になります。
補足:認証ファイルは一時的
- トークンファイルは認証が終われば Certbot によって削除されます
- 中身も暗号的な署名済みトークンであり、漏れても問題ありません
まとめ
Certbotは、Webroot認証において以下を全自動で行います:
ステップ | 処理内容 |
---|---|
① | Let's Encryptに証明書リクエスト |
② | 指定されたトークンファイルをWebrootに作成 |
③ | Let's EncryptによるHTTPアクセスに応答 |
④ | 証明書を取得し、ローカルに保存 |
この流れによって、ドメインの所有を確認し、SSL/TLS証明書を安全に取得することができます。