開発者:ナレッジ:ACME(アクミー)ってなに?
いい着眼点ですね!
Let's Encryptが無料で証明書を発行できるのは、ACMEというプロトコルが使われているからという点が大きいでしょう。
これは非常に画期的なもので、今ではRFCにも載っています。
ACMEとは
ACME(Automatic Certificate Management Environment、日本語では自動証明書管理環境、アクミー)は証明書を自動で発行するために使われるプロトコルです。
ACMEは、以下のような特徴を持っています。
- 自動!:普通に証明書を発行しようとすると、やれCSRを作成しろ、やれDNS認証しろ、やれメール認証しろと面倒なことが多いです。ACMEはこんな引くほどだるいことを自動でやってくれます。加えて、大半の場合はその場で証明書が発行できます。ついでに、証明書の更新(Let's Encryptは90日)も自動で行えます。いやー、至れり尽くせりですね。
- 標準的!:ACMEは晴れて(RFC8555)に載りました!情報も多く出そろっているので、実装もしやすいでしょう。
- 簡単!:ACMEは種類にもよりますが普通のHTTPを使えます。仕組みも種類によっては比較的単純で、理解もしやすいはずです。
- 安心!:やばい!証明書が漏洩した!というとき、ACMEは証明書の失効を簡単に行えます。(ここだけの話、ChromeやEdgeではほとんどOCSPをやってくれないためCRLが有効に機能しているかはかなり疑問です。ただ、FirefoxとSafariは律儀にも検証してくれているので、全くの無意味ではないと信じたいところです。)
ACMEによって証明書を発行する手順としくみ
ACMEには、途中の手順にいくつかの方法が選べます。用途によって選べるので、使い分けるといいでしょう。
以下に代表的なHTTP-01とDNS-01を紹介します。(TLS-ALPN-01は面倒なので省きます)
HTTP-01(HTTPを使った認証)
HTTP-01は、HTTPサーバを使って認証を行います。
仕組みも簡単ですので、使いやすいでしょう。
ざっとした流れは以下の通りです
- ACMEクライアントが、証明書を発行するためのリクエストを送信する。(CSR(Certificate Signing Request・証明書署名要求)を含む)
- 認証局(今回はLet's Encrypt)が、受け取ったリクエストに対して、認証を行うためのトークン(文字列)を返してくれる。
- 情報を受け取ったACMEクライアントは、その情報をHTTPサーバ(通常
.well-known/acme-challenge/(発行されたトークン)以下)に配置する。 - ファイルの準備が整ったら、ACMEクライアントが認証局にこのことを通知する。
- 認証局が、HTTPサーバにアクセスして、トークンが配置されているか取得しにくる。
- 認証局がトークンを取得・検証に成功したら、証明書を発行する。
- Enjoy!
DNS-01(DNSレコードを使った認証)
DNS-01は、DNSのレコードを使って認証を行います。
DNSのレコードをリアルタイムで変更しなければならないため、ハードルは若干高いです。
- ACMEクライアントが、証明書を発行するためのリクエストを送信する。(CSR(Certificate Signing Request・証明書署名要求)を含む)
- 認証局(今回はLet's Encrypt)が、受け取ったリクエストに対して、認証を行うためのトークン(文字列)を返してくれる。
- 情報を受け取ったACMEクライアントは、その情報を権威DNSサーバのTXTレコードに配置する。
- レコードの準備が整ったら、ACMEクライアントが認証局にこのことを通知する。
- 認証局が、DNSサーバのTXTレコードへアクセスして、配置したトークンを確認する。
- 認証局がトークンを取得・検証に成功したら、証明書を発行する。
- Enjoy!
ディスりたくはないですが、DNS経由のDCVは面倒で(今回は)メリットがありません。
DNS-01はDNSを利用するDCVであり、その認証の都度リアルタイムでDNSレコードを変更する必要があります。
自動化されたDNS利用のDCVに対応させるためには、DNSサーバがAPI的な方法でDNSレコードを変更させることに対応していないとただでさえ面倒な実装が、より面倒になります。
ワイルドカード証明書が得られるといったメリットも確実に存在していますが、より簡単なHTTP-01が用意されているのにわざわざDNS-01を選ぶ理由はあまりないでしょう。
どっちを使うべき?
上で述べているとおり、HTTP-01で良いでしょう。
今回の用途でDNS-01を使うのは、単に足かせを自分で作るようなものです。
このドキュメントとしても、今後はHTTP-01を使うことを前提としてDNS-01には触れません。
DNS-01を選ぶ勇者を止めはしない...