web-dev-qa-db-ja.com

証明書の透明性:正当な事前証明書を記録し、不正な証明書を発行します

Certificate TransparencyがSCTを証明書に埋め込む不正な認証局の問題を解決する方法を理解しようとしています。ログは追加専用であり、サーバーは証明書が実際にログに記録されたことを「証明」できることを理解しています。

私が不正なCAであり、証明書を発行するだけでなく、いくつかのログにも記録したいとします。誰も気にしないドメイン名の証明書を作成し(foobar.comなど)、事前証明書をログに送信します。その後、SCTを取り戻すことができます。次に、ポイズンエクステンションを削除し、別のドメイン名(たとえば、Paypal.com)をSANフィールドに追加して、証明書を発行します。

これを防ぐメカニズムはありますか? CTログをスキャンしても、私がPaypal.comの証明書を発行したことはわかりませんが、ブラウザーはその証明書を信頼しているはずであり、証明書をログに送信したと信じています。

CTの目的は、CAが許可されていない証明書を発行しないようにすることです。これを防ぐためのベースライン要件があると確信しています。CAがこれを実行すると、信頼されたルートから削除されます。しかし、これを防ぐための暗号的に安全な方法はありますか?

5
Ayesh K

推測:うまくいきません。一部のCAが非標準の墨消しスキームを使用しようとしたときも同じです。 -これは、実際に別の証明書を発行しながら1つの証明書を送信する特定のバリアントです。これは、実際に確認する必要のあるブラウザによって検出されました。 -> 私のサイトでは証明書の透明性が有効になっていますが、Chromeは引き続きNET :: ERR_CERTIFICATE_TRANSPARENCY_REQUIRED を表示しています)

-CTの実施はブラウザ次第です。また、AFAIKはChromeでのみ必要です。ただし、CT =すべての要件は、Chrome 2017年10月の場合)が差し迫っています。参照: https://groups.google.com/a/chromium.org/forum/m/#!topic/ct-policy/78N3SMcqUGw

編集1:CTは何に適していますか?

あなたが書いた:

CTの目的は、CAが許可されていない証明書を発行しないようにすることです。

そうではありません。目的は予防ではなく説明責任です。 CAはいつでも任意のドメインの証明書を発行できます。その部分はCTによって変更されません。

ゲームチェンジャーとは、不正な証明書が発行されると、次の2つのいずれかが発生する可能性があることです。

  • CAがCTにまったく送信しないか、別のホスト名で送信すると、(ブラウザが実際にこれを実行するとすぐに)ブラウザは証明書を拒否します。そして、不正な証明書は役に立たなくなります。
  • CAが正しいホスト名でCTに送信する場合、証明書は公開されます。また、気になるドメイン所有者は、自分のすべてのドメイン名の自動監視ジョブをCTログに記録できます。 ( Facebookはこのようなサービスを無料で提供しています 。)

彼ら自身の言葉で:

証明書の透過性により、認証局によって誤って発行されたSSL証明書、または他の方法では攻撃できない認証局から悪意を持って取得されたSSL証明書を検出できます。また、不正になり、悪意を持って証明書を発行している認証局を特定することもできます。

2
StackzOfZtuff

はい、あなたが説明したシナリオをキャッチすることは可能です。

証明書チェーン全体がログに保存されるため、これが可能になります。質問は、「これを行う責任があるのはどちらの当事者か?」です。そして「彼らはそれをどのように行うのですか?」

主な責任は、依拠当事者であるクライアント(私の解釈であり、標準には記載されていません)が何かに依存する前に適切に確認することです。

RFC 6962ドキュメント に基づく、それがどのように起こるかについての私の再構成(解釈?)

  1. 証明書(事前証明書と実際の証明書)は、説明したとおりにログに記録され、発行されます。
  2. TLSハンドシェイク中に、ClientにはClientHello拡張 "signed_certificate_timestamp"が含まれ、extension_dataは空になります。
  3. サーバーは、タイプが「signed_certificate_timestamp」のextension_dataでSCT(該当する場合、複数のログプロバイダーからの複数)を返します。
  4. クライアントはログから証明書チェーンを取得し、任意の順序で4つのチェックを実行します。
  5. (3a)証明書の署名は、サーバー提供の証明書とログ提供の証明書の間で一致しますか?
  6. (3b)証明書のSCTは一致していますか? (取得はLogIDによるものと思われるため、このチェックが必要になると思います)
  7. (3c)証明書の整合性はチェックアウトされますか?これは、すでに流行しているチェックの一部です。
  8. (3d)サーバー名は証明書のSNI/SNエントリの1つと一致しますか?これもすでに現在流行しているチェックの一部です。

クライアントが3aおよび3bを実行すると、詐欺が検出されると思います。 CTログとSCTの役割は、クライアント(証明書所有者とCT監査人を含む)が情報を利用できるようにすることで停止し、そのような不正を早期に検出できるようにします。

説明したシナリオで証明書所有者が共謀していない場合、証明書が所有者に配信され、所有者が証明書をCTログに送信するとすぐに問題が検出されます。証明書に署名の不一致があります。

証明書の所有者が共謀している場合でも、準拠しているブラウザー(クライアント)がこのチェックを行うと、証明書でのデータの変更方法に応じて、3aまたは3bで検出されます。

1
Sas3