破棄されたブログ

このブログは破棄されました。

Let's Encrypt の技術概要(翻訳)

以下の文章は、Let's Encrypt の Technical Overview の翻訳になります。

The Linux Foundation の利用条件に基づいて、 CC BY 3.0 ライセンスが適用されます。

誤訳・誤認・誤字・脱字・ライセンス上の問題等がありましたら、ご連絡ください。

Let's Encrypt の技術概要

Let's Encrypt そして ACME プロトコルの目的は、 あらゆる人間の手を介さずに、HTTPS サーバのセットアップを行いとブラウザに信頼された証明書を自動で取得することにあります。 これは、 Web サーバで動作する証明書管理エージェントによって行われます。

この技術の仕組みについて理解するため、Let's Encrypt をサポートした、証明書管理エージェントを用いて https://example.com/ をセットアップするプロセスを追ってみましょう。

このプロセスには、ふたつのステップがあります。 まず、 エージェントは、 CA に Web サーバがドメインを管理していることを証明します。 そして、エージェントは、ドメインの証明書の発行・更新・失効ができるようになります。

ドメイン認証

Let's Encrypt は、公開鍵を用いてサーバの管理者を識別します。 最初に、エージェントソフトウェアが Let's Encrypt とやりとりするにあたり、 エージェントは、新しくキーペアを生成し、 Let's Encrypt の CA にひとつまたは複数ドメインをサーバが管理していることを証明します。 これは、一般的な CA のアカウント作成とアカウントへのドメイン追加へのプロセスと似ています。

プロセスの開始にあたり、example.com を管理していることを証明することが必要なため、 エージェントは Let's Encrypt の CA へ問い合わせを行います。 Let's Encrypt の CA は、リクエストされたドメインを確認して、ひとつまたは複数のチャレンジを課します。 エージェンがドメインを管理していることを証明するには、複数の方法があります。 例えば、 CA は、次のいずれかの選択しをエージェントへ与えます

  • example.com 下の DNS レコードを設定する、または、
  • https://example.com 上の特定の URI に HTTP リソースを設定する

チャレンジと併せて、 Let's Encrypt は、一時キー (nonce) をエージェントに渡します。 キーペアが管理下にあることを証明するため、 エージェントは秘密鍵で署名しなければなりません。

f:id:namidamexx:20150628004547p:plain

エージェントソフトウェアは、与えられたいくつかのチャレンジのうち、ひとつを完了させます。 上のタスクの二番目が完了したしましょう(https://example.com 上の指定されたパスにファイルを作成しました)。 併せて、エージェントは、与えられた一時キーを秘密鍵で署名します。 一度エージェントがこれらステップを完了させると、 エージェントは、 CA へ認証を完了させる準備ができたことを通知します。

次は、 CA がチャレンジが達成されたことを確認する番です。 CA は、一時キーの署名を確認し、 Web サーバ上のファイルをダウンロードして、 期待している値と一致するか確認します。

f:id:namidamexx:20150628004622p:plain

一時キーが正しく署名され、チャレンジが確認されると、 example.com の証明書を管理していると認められた公開鍵で、エージェントが識別されるようになります。 エージェントが使ったキーペアを example.com の「認証済みキーペア」 (authorized key pair) と呼びます。

証明書の発行と失効

一度エージェントが認証済みキーペアを得ると、証明書の発行・更新・失効は簡単です。 証明書の管理メッセージを認証済みキーペアを用いて署名して送るだけでよいのです。

ドメインの証明書を取得するために、 指定された公開鍵での example.com の証明書を発行を Let's Encrypt の CA へ要求する、 PKCS#10 証明書署名要求を作成します。 従来通り、 CSR は、 CSR 内の公開鍵と対応する秘密鍵での署名を含みます。 また、エージェントは、 CSR 全体を example.com の認証済みキーで署名し、 Let's Encrypt の CA が認証済みであることを確認できるようにします。

Let' Encrypt の CA がリクエストを受け取ると、両方の署名を確認します。 いずれも問題がないようであれば、 example.com の証明書を発行して公開鍵と併せてエージェントへ返します。

f:id:namidamexx:20150628004641p:plain

失効の手順も似ています。 エージェントは、失効リクエストを example.com の認証済みキーで署名し、 Let's Encrypt の CA はリクエストが認証済みであることを確かめます。 認証済みであれば、失効情報を 通常の失効チャンネル(CRL, OCSP など)へ公開します。 そのため、ブラウザなどの証明書利用者は、失効した証明書を認めてはいけないことを知ることができます。

f:id:namidamexx:20150628004655p:plain

広告を非表示にする