最終更新日:
注意: このページが翻訳された後、英語バージョンのページがアップデートされています。 () 英語で表示する
Let’s Encrypt と ACME プロトコルの目標は、HTTPS サーバーのセットアップと、ブラウザが信頼する証明書の自動的な取得を、人間の仲介なしに可能にすることです。 この目標は、ウェブサーバー上で証明書管理エージェントを実行することで実現されます。
この技術がどのような仕組みなのかを理解するために、Let’s Encrypt をサポートする証明書管理エージェントを使用して https://example.com/ を設定する過程を見ていきましょう。
このプロセスには2つのステップがあります。 1つ目は、CA に対して、ウェブサーバーがドメインをコントロールしていることを証明するプロセスです。 2つ目は、そのドメインに対して、エージェントが証明書のリクエスト・更新・無効化を行うプロセスです。
ドメインの検証
Let’s Encrypt はサーバーの管理者を公開鍵で特定します。 エージェントソフトウェアが Let’s Encrypt と初めて通信するとき、新しいキーペアを生成し、Let’s Encrypt CA に対して、1つ以上のドメインがコントロールしていることを証明します。 これは、アカウントを作成し、そのアカウントにドメインを追加する、という伝統的な CA プロセスと同様です。
このプロセスを始めるために、エージェントは Let’s Encrypt CA に対して、自分が example.com
をコントロールしていることを証明するためには何をすればいいか、と質問します。 Let’s Encrypt CA はリクエストされたドメイン名を見て、1つ以上のチャレンジのセットを答えます。 エージェントがドメインをコントロールしていることを証明する方法は複数あるためです。 たとえば、CA はエージェントに対して、以下のような選択肢を与えます。
example.com
以下の DNS で指定した情報を公開すること、あるいは、http://example.com/
上の well-known な URI で指定した HTTP リソースを公開すること
チャレンジの間に、Let’s Encrypt CA はエージェントに対してノンスを与えます。エージェントは秘密鍵を使ってこのノンスに署名する必要があります。これにより、エージェントがキーペアをコントロールしていることも証明します。
エージェント・ソフトウェアは、提示されたチャレンジのうちの1つをクリアします。 今、上の例で提示された2つ目のチャレンジをエージェントがクリアできるとしましょう。このとき、エージェントは http://example.com
のサイト上の特定のパスにファイルを1つ生成します。 また、エージェントは提示されたノンスに秘密鍵を使って署名します。 エージェントがこれらのステップをクリアしたら、CA に検証の準備ができたことを伝えます。
すると、CA は、チャレンジが正しく行われたかをチェックします。 CA はノンスの署名が正しいことを検証し、ウェブサーバーからファイルをダウンロードし、その中に期待どおりのコンテンツが含まれているかどうかを確認します。
もし、ノンスに書かれた署名が有効であり、チャレンジがクリアされたならば、公開鍵を持つエージェントは example.com
に対する証明書の管理を行うことを認証されたことになります。 私たちは、このエージェントが使用するキーペアのことを、example.com
に対して「認証されたキーペア」と呼びます。
証明書の発行と無効化
一度エージェントが認証されたキーペアを取得したら、証明書のリクエスト・更新・無効化は簡単です。証明書管理メッセージを生成し、認証されたキーペアで署名して送信すればいいだけです。
ドメインの証明書を取得するには、エージェントは Let’s Encrypt CA に対して、example.com
の証明書を発行する依頼と公開鍵を含めた、PKCS#10 証明書署名リクエスト (Certificate Signing Request) を作ります。 通常、CSR の中には、CSR に同梱された公開鍵に対応する秘密鍵による署名が含まれています。 さらに、エージェントは CSR 全体を example.com
に対して認証されたキーで署名します。これにより、Let’s Encrypt CA は CSR が認証されていることを確認できます。
Let’s Encrypt CA がこのリクエストを受け取ると、両方の署名を検証します。 すべてが問題なければ、 example.com
の証明書を発行し、CSR に同梱されていた公開鍵で暗号化してエージェントへ送り返します。
無効化の作業も同じ方法で行われます。 エージェントは無効化リクエストを作り、example.com
に対して認証されたキーペアで署名をして送ります。Let’s Encrypt CA はリクエストが認証されているかどうかを検証します。 もし認証されていれば、証明書の無効化の情報を一般の無効化チャンネル (たとえば、OCSP) に公開します。その結果、このチャンネルを使用しているブラウザなどは、無効化された証明書を受け入れてはいけないことを知ることができます。