Let's Encrypt の仕組み
Let's Encrypt と ACME プロトコル (英文) の目的は、HTTPS サーバの設定と、ブラウザが信頼している SSL/TLS サーバ証明書の取得を、完全に自動化することです。これらは、証明書管理エージェント(クライアントソフトウェア)をウェブサーバ上で実行することにより行われます。
この仕組みへの理解を深めるために、Let's Encrypt をサポートしている証明書管理エージェント(クライアントソフトウェア)を用いて、https://example.com/
をセットアップするプロセスを例に挙げて説明します。
セットアッププロセスの概略は、次の通りです。
- 証明書管理エージェントを実行しているウェブサーバが、証明書を発行する対象となるドメイン名を管理下においていることを、認証局 に対して証明します。
- それにより、証明書管理エージェント(クライアントソフトウェア)が、当該ドメイン名に対する証明書の発行・更新・失効を要求することが認可されます。
ドメインの認証
Let's Encrypt は、サーバ管理者を公開鍵によって識別します。
まず最初に、証明書管理エージェント(クライアントソフトウェア)が新しいキーペア(秘密鍵と公開鍵)を生成し、そのサーバがドメイン名 example.com
を管理していることを、Let's Encrypt の 認証局 に対して証明します。これは、伝統的な 認証局 における、アカウント発行および当該アカウントへのドメイン名の追加のプロセスに良く似ています。
ドメイン名 example.com
を管理下に置いていることを証明する方法は複数あります。そのため、証明書管理エージェント(クライアントソフトウェア)は、認証局 から与えられた複数の選択肢の中から、任意の証明方法(チャレンジ)を選択することができます。
example.com
のDNSレコードに認証用のレコードを追加する。https://example.com/
内の公知の URI に、認証用のファイルを設置する。
チャレンジと同時に、キーペアを管理下においていることを証明させるために、Let's Encrypt の 認証局 は、証明書管理エージェント(クライアントソフトウェア)に対してワンタイムトークン(使い捨ての乱数データ)を提供し、それを秘密鍵で署名するように要求します。
証明書管理エージェント(クライアントソフトウェア)によって、前述のチャレンジのうちの2つ目が選ばれたとします。その場合、証明書管理エージェント(クライアントソフトウェア)は https://example.com
サイトの指定されたパスへの認証用ファイルの設置と、ワンタイムトークンに対する秘密鍵での署名を行います。認証局 は、ワンタイムトークンに対する署名とウェブサーバからダウンロードした認証用のファイルの妥当性を検証することにより、チャレンジへの応答が要求を満たしていることを確認します。
認証局 は、ワンタイムトークンへの署名とチャレンジの妥当性を確認後、公開鍵によって識別された証明書管理エージェント(クライアントソフトウェア)に対して、example.com
の証明書を管理することの認可を与えます。
証明書の発行と失効手続き
一度、証明書管理エージェント(クライアントソフトウェア)が認可されたキーペアを手に入れれば、認可されたキーペアで署名した証明書管理メッセージを送信する方法により、証明書の取得・更新・失効を簡単に行うことができます。
ドメイン名に対する証明書を取得するとき、証明書管理エージェント(クライアントソフトウェア)は、 Let's Encrypt の 認証局 に対して example.com
の公開鍵を証明する証明書の発行を要求するために、PKCS#10 Certificate Signing Request (英文) を作成します。
通常、CSR(証明書署名要求)には、CSR に含まれる公開鍵に対応する秘密鍵を使って行われた署名が内包されています。また、証明書管理エージェント(クライアントソフトウェア)は、example.com
に対する CSR 全体を認可された鍵を使って署名することで、Let's Encrypt の 認証局 が認可された要求であることを確認できるようにします。
Let's Encrypt 認証局 がリクエストを受け取ったとき、2つの署名を検証します。
もし、問題なければ、CSR に含まれていた example.com
の公開鍵を証明する証明書を発行し、証明書管理エージェント(クライアントソフトウェア)に渡します。
失効の手続きも、同様の方法で行います。
証明書管理エージェント(クライアントソフトウェア)が、証明書失効リクエストを認可された example.com
のキーペアを使って署名してから Let's Encrypt の 認証局 に送ることで、そのリクエストが認可されたものであることを証明します。
この証明書失効リクエストが行われると、通常の証明書失効チャンネル(CRLs, OCSP)に対して失効情報が発行されます。それにより、ブラウザなどが、既に失効している証明書(受け入れてはならない証明書)であることを確認することができます。
- スポンサーリンク
翻訳記事の出典と留意事項
このページ「Let's Encrypt の仕組み」は、下記ページの全文を和訳したものです。