このゲスト ブログはシリーズの一部であり、F5との提携により作成されました。
CSR、PEM、DER、X509…証明書がある種の魔法のように見られることが多いのも不思議ではありません。
初めて証明書を発行したとき、私は自分が何をしているのか理解できませんでした。漫然と大量のコマンドをコピーして、コピーしたコマンドがうまく機能するように祈りました。しかし、セキュリティに関して言えば、誰かが闇雲にコマンドをコピーすることを期待するのは、危険なことなのです。証明書ほど危険なものはありません。
証明書は、TLS(およびTLSを使用する最も一般的なHTTPS)接続の基礎となるものです。ここでミスが発生すると、接続が攻撃者に傍受される危険性があります(TLS接続によって提供される保護機能が、事実上無効になります)。
このブログは、証明書の役割、特に証明書の管理について説明するシリーズの一部です。最初のパートでは、証明書の目的と、なぜ証明書が接続(つまり、TLS接続)の安全性確保において重要な役割を果たすのかを説明します。
クライアントをサーバーに接続する際は、セキュリティ面で2つの原則を考慮する必要があります。
1つは機密性です。これは非常に重要で、クライアントとの間で送受信されるデータを、そのトラフィックの外部にいる人物に対して表示されないようにします。ログイン ページが良い例です。ログインしようとしているサーバーと通信する際に、入力するユーザー名とパスワードを誰の目にも触れないようにしたいというのは誰もが思うことです。また、機密性はプライバシーの面でも重要で、行動や閲覧している情報を覗き見されないようにします。
もう一つの原則は完全性です。これは、TLSに関しては多くの人が失念していたり、意識していなかったりするものです。完全性とは、クライアントとの間で送受信されるデータを誰も改ざんできないということです。たとえリソースが公開されていても、データの完全性は確保したいと私たちは考えます。
一般公開されていてアクセス可能なニュース サイトについて考えてみましょう。このページは一般公開されているので、機密性の面はあまり気にしていません(プライバシーは別ですが、この例では横に置いておきましょう)。しかし、サーバーからクライアント(ユーザーのブラウザ)に送信されるデータが操作されていないことは確認したいのです。サーバーの完全性を考慮しないと、攻撃者がニュース記事の内容を編集したり(フェイク ニュースをお考えください)、Browser Exploitation Frameworkフックのような悪意のあるコンテンツをページに挿入したりする可能性があります。
では、このような状況の中で証明書はどのような役割を担っているのでしょうか?クライアントがサーバーに接続する際は、最初に証明書によって意図したサーバーに接続していることを確認する必要があります。攻撃者が模倣したサーバーではありません。また、接続がエンドツーエンドで暗号化されていることも保証したいと考えます。つまりトラフィックの検査と変更ができるように接続がどこかで終了されておらず、元のサーバーに転送されてもいないということです。これは、中間者攻撃と呼ばれています。
誤解のないように言うと、特に組織のセキュリティ向上のためにインターネット トラフィックを検査することがたびたびある企業環境では、これについて有効なユース ケースがあります。ここで、証明書の登場です。クライアントがTLSのサーバーに接続する際、サーバーはその(サーバー)証明書をクライアントに提供しなければなりません。クライアントはこの証明書を検証し、クライアントがもともと接続しようとしていた適切なサーバーに属していることを確認します。これが確立されると(TLSハンドシェイクの一部)、クライアントとサーバー間の通信を開始できます。
このシリーズの次のパートでは、私自身のブログでこのトピックについて引き続き説明していきます。そこでは、証明書を検証するプロセスを取り上げる予定です。証明書を管理することの人間的側面とその重要性について掘り下げていきます。
それまでに、David WarburtonとNigel Ashworthによる有益なF5 myForumセッション(Be Prepared for the Changing SSL Landscape(変化するSSL状況に備えよう))をチェックすることを強くお勧めします。進化し続けているSSLとTLSの状況が分かりやすく解説されており、ご一読いただく価値があります。
Sean Wrightは、ソフトウェア開発者としてキャリアをスタートさせた経験豊富なアプリケーション セキュリティ エンジニアです。主にWebベースのアプリケーション セキュリティに着目し、特にTLSとサプライ チェーン関連のテーマに関心を持っています。また、アプリケーション セキュリティに関して技術面でリーダーシップを発揮した経験や、開発および保守するシステムやアプリケーションのセキュリティを向上させるためにチームと連携した経験もあります。彼のブログはこちらからご覧いただけます。