先に要点
- ACME はTLS証明書の発行と更新を自動化するための標準プロトコルです(RFC 8555)。やっていることはそのドメインを本当に管理しているかを機械的に確かめて、通れば証明書を出すという手続きの取り決めです。
- もう選択肢ではありません。サーバー証明書の最大有効期間は2026年3月15日から200日、2027年3月15日から100日、2029年3月15日から47日へ短くなります。年に1回まとめて手で更新する運用は成り立ちません。
- 設計で決めるのはどのチャレンジ方式を使うかです。
HTTP-01は80番ポートの到達性、DNS-01はDNSの自動更新、TLS-ALPN-01は443番でのTLS終端が前提になります。 - ワイルドカード証明書が必要なら
DNS-01以外に選択肢はありません。Let’s Encrypt はこれを明記しています。
証明書を自動で更新したいが、方式が3つあってどれを選べばよいか分からない。あるいは入れてみたら検証に失敗して、なぜ通らないのか分からない。この2つはどちらも、チャレンジ方式が何を前提にしているかを押さえれば整理できます。
この記事では、ACME が何をしているのかを確認したうえで、3つの方式の違いと選び方、そして更新を回し続けるために要るものを整理します。
なぜ自動化が前提になったのか
理由は有効期間です。CA/Browser Forum が、サーバー証明書の最大有効期間を段階的に短くすることを決めています。
| 時期 | 最大有効期間 |
|---|---|
| 2026年3月15日以降 | 200日 |
| 2027年3月15日以降 | 100日 |
| 2029年3月15日以降 | 47日 |
47日になると、年に何回という頻度ではなくなります。手で更新する前提の手順書は、遅かれ早かれ回らなくなります。だから自動化は好みの問題ではなく、期限に追われて必ず通る道になりました。証明書そのものの位置づけは デジタル証明書とは? に整理しています。
ACME は何をしているのか
手順は素直です。
- クライアントが認証局に「このドメインの証明書が欲しい」と申し込む
- 認証局がそのドメインを管理していることを示す課題(チャレンジ)を出す
- クライアントが課題に応える形を用意する
- 認証局が外から確認し、通れば証明書を発行する
人が申請書を出す代わりに、サーバーが自分で取りに行けるようにしたのがこのプロトコルです。実際に動かすのは Certbot のような ACME クライアントで、ACME 自体は約束事の名前です。
3つのチャレンジ方式
| 方式 | 何で証明するか | 必要なもの | ワイルドカード |
|---|---|---|---|
HTTP-01 |
指定のパスにトークンのファイルを置く | 80番ポートで外から届くWebサーバー | 不可 |
DNS-01 |
トークンから作ったTXTレコードを立てる | DNSを自動で書き換える手段 | 可 |
TLS-ALPN-01 |
443番のTLSハンドシェイクの中で応える | TLSを終端している自分の実装 | 不可 |
HTTP-01 が置く場所は /.well-known/acme-challenge/ の下です。ここに認証局がアクセスして中身を確認します。
TLS-ALPN-01 は、TLS のやり取りの中で専用のプロトコル名を使って応える方式です。かつて似た役割の方式がありましたが、安全性が十分でなかったため2019年3月に廃止されました。その置き換えとして用意されたのがこの方式です。
どれを選ぶか
上から順に見ると決まります。
- ワイルドカードが必要か。必要なら
DNS-01で確定します。ほかに手はありません - 80番ポートを外から開けられるか。開けられるなら
HTTP-01がいちばん手間が少ないです - 80番を閉じたいが443番は自分で終端しているか。その場合に
TLS-ALPN-01が候補になります - DNSにAPIがあるか。
DNS-01は自動化するならDNS側を機械的に書き換える必要があります
迷ったときの落とし穴が4番です。DNS-01 は柔軟ですが、DNSを書き換える権限を持つ鍵をサーバーに置くことになります。その鍵で他のレコードも触れてしまうなら、権限を絞れるかを先に確認してください。
更新のタイミングは期限直前にしない
Let’s Encrypt は有効期間の3分の1が残った時点での更新を推奨しています。90日の証明書なら30日前です。
余裕を持たせる理由は単純で、失敗したときに気づいて直す時間が要るからです。期限の前日に1回だけ試す作りだと、失敗はそのまま失効になります。
もう1つ、毎日決まった時刻に一斉に走らせないという注意もあります。多くのサーバーが同じ時刻に集まると、認証局側に山ができます。Let’s Encrypt は時刻をばらけさせるよう求めています。
一番怖いのは、止まったことが見えないこと
自動更新は入れた直後は動きます。問題は途中で止まったときに何も起きないことです。
- DNSの鍵が期限切れになった
- 80番ポートを塞ぐ設定変更が入った
- クライアントの設定ファイルがサーバー移行で失われた
どれも更新が走らなくなるだけで、証明書は期限まで有効に見えます。気づくのは失効した瞬間で、そのとき初めて全利用者に警告が出ます。
だから自動更新とセットで、期限までの残り日数を外から見る仕組みが要ります。自動化の中に組み込むのではなく、別の場所から見ることが大事です。同じ仕組みが止まったら通知も止まるからです。更新忘れの影響は SSL証明書の更新忘れはなぜ危険? にまとめています。
ACME は特定の認証局のものではない
混同されやすい点です。ACME はプロトコル、認証局は証明書を出す組織です。Let’s Encrypt がこの仕組みで有名になりましたが、専用の仕組みではありません。
複数の認証局が ACME に対応しているので、同じクライアントのまま発行先を切り替えられます。1つの認証局に障害が出たときの代替を持てる、という意味でも押さえておく価値があります。
ACMEとチャレンジ方式に関するよくある質問
Q. HTTP-01 を使うのに80番を開けるのは危険ではないですか?
80番で受けるのは検証のためのファイル配信だけにして、それ以外は443番へ転送するのが一般的な形です。アプリ本体を80番で提供する必要はありません。それでも閉じたいなら DNS-01 か TLS-ALPN-01 を選びます。
Q. DNS-01 は反映を待つ必要がありますか?
TXTレコードが行き渡るまで時間がかかることがあります。反映が遅いDNSでは、検証に進む前に待つ設定が要ります。クライアント側に待ち時間の指定があるので、失敗が続くならここを疑ってください。
Q. ロードバランサの後ろにサーバーが複数ある場合は?
HTTP-01 は検証のアクセスがどのサーバーに届くか分からないのが問題になります。全台で同じトークンを返せるようにするか、DNS-01 へ寄せるかの二択です。台数が増えるほど DNS-01 が楽になります。
Q. 更新が失敗していることに、どうやって気づけばよいですか?
証明書の期限を外から見る監視を別に持ってください。更新の仕組み自体のログだけ見ていると、仕組みが動かなくなったときに何も出ません。残り日数がしきい値を下回ったら通知する、という形が確実です。
まとめ
ACME はドメインの管理者であることを機械的に証明して、証明書を受け取るための約束事です。有効期間が短くなり続けるので、導入するかどうかではなくどの方式で回すかが論点になりました。
判断は上から順です。ワイルドカードが要るなら DNS-01。80番が開けるなら HTTP-01。どちらも難しいなら TLS-ALPN-01。そして更新の失敗は静かに起きるので、期限を外から見る監視を必ず別に用意してください。