🐻‍❄️

暗号化通信を支えるSSL/TLSサーバー証明書の仕組みについて

に公開

はじめに

現在、インターネット上でWebサイトを閲覧する際、ほとんどの通信がHTTPSで行われています。ブラウザで検索したり、Webサイトを閲覧したりする際に送受信されるデータを暗号化することで、第三者による盗聴や改ざんから情報を守る必要があるからです。

このHTTPS通信を実現するために必要不可欠なのが「SSL/TLSサーバー証明書」です。SSL/TLSサーバー証明書は、以下の2つの重要な役割を果たします:

  1. 通信の暗号化 - ユーザーとサーバー間でやり取りされるデータを暗号化し、安全な通信を実現
  2. サーバーの身元証明 - アクセスしているWebサイトが本物であることを証明

現代では、Googleなどの主要ブラウザがHTTPS化を強く推奨しており、HTTPSに対応していないサイトには「保護されていない通信」という警告が表示されるようになっています。そのため、Webサイトを運営する上でSSL/TLSサーバー証明書の導入は必須となっているのです。

本記事では、SSL/TLSサーバー証明書の仕組みについて解説していきますが、特に理解が難しい「証明書チェーン」について詳しく説明したいと思います。

SSL/TLSサーバー証明書

HTTPS通信の流れ

SSL/TLSサーバー証明書を用いたHTTP通信の暗号化(HTTPS通信)は、以下のような仕組みで動作します。

引用元:誰でもわかる SSL (HTTPS) 通信の仕組み [図解]

共通鍵暗号方式と公開鍵暗号方式

共通鍵暗号方式

暗号化・復号の両方で同じ鍵を利用する暗号化技術です。事前に通信する双方で鍵を安全に共有する必要があり、通信セッションごとに異なる鍵を用意することが求められます。

公開鍵暗号方式

暗号化用と復号用で別々の鍵を用いる暗号化技術です。暗号化に使う公開鍵は広く配布可能ですが、復号に使う秘密鍵は受信側が慎重に保管する必要があります。

引用元:共通鍵暗号方式と公開鍵暗号方式の違いとは何か?暗号化技術について解説 | Promapedia

証明書チェーン

なぜ証明書チェーンが必要なのか

HTTPS通信では、以下の2つの理由から証明書が必要になります:

  1. 共通鍵の安全な交換 - 実際の通信で使用する共通鍵を安全にサーバーと共有するため
  2. サーバーの身元証明 - 通信相手が本物のサーバーであることを証明するため

ここで重要なのは、実際のデータ通信には「共通鍵暗号方式」を使用するという点です。公開鍵暗号方式は安全ですが、処理が重く通信速度が遅くなってしまいます。一方、共通鍵暗号方式は高速に処理できるため、大量のデータをやり取りするWeb通信に適しています。

そこで、HTTPS通信では以下のような方式を採用しています:

  • 共通鍵の交換時のみ → 公開鍵暗号方式を使用(安全性重視)
  • 実際のデータ通信 → 共通鍵暗号方式を使用(速度重視)

デジタル署名による証明の仕組み

SSL/TLSサーバー証明書には以下の情報が含まれています:

  1. サーバーの公開鍵 - クライアントが共通鍵を暗号化するために使用
  2. サーバーの情報 - ドメイン名、組織名など
  3. デジタル署名 - 証明書の内容が改ざんされていないことを保証

このデジタル署名は、認証局(CA: Certificate Authority)が自身の「秘密鍵」を使って証明書の内容(ハッシュ値)を暗号化したものです。

証明書の検証プロセス

ブラウザが証明書を検証する際の流れ:

  1. サーバー証明書の受信

    • サーバーから証明書を受け取る
  2. デジタル署名の検証

    • 証明書に含まれるデジタル署名を、発行元CAの「公開鍵」で復号
    • 証明書の内容からハッシュ値を計算
    • 復号した値と計算したハッシュ値が一致すれば、証明書は改ざんされていない
  3. 発行元CAの証明書の検証

    • しかし、ここで問題が生じます:「発行元CAの公開鍵は本物なのか?」
    • これを証明するために、さらに上位のCAによる証明が必要になります

証明書チェーンの構造

この「証明の証明」を繰り返していくと、最終的に以下のような階層構造になります:

ルートCA証明書(自己署名証明書)
    ↓ 署名
中間CA証明書
    ↓ 署名
サーバー証明書

ルートCA証明書の特徴

  • 自己署名証明書 - 自分自身の秘密鍵で署名している
  • ブラウザに事前インストール - OS やブラウザに最初から組み込まれている
  • 絶対的な信頼の起点 - これ以上の証明は不要(信頼せざるを得ない)

ルートCA証明書がブラウザに事前にインストールされているため、証明書チェーン全体の検証が可能になります。ブラウザは、ルートCAの公開鍵を使って中間CAの証明書を検証し、中間CAの公開鍵を使ってサーバー証明書を検証するという流れで、信頼の連鎖を確認していきます。

引用元:SSLサーバー証明書の発行手順 – ラボラジアン

証明書とチェーンの確認

ブラウザで下記のようにSSL/TLSサーバー証明書のチェーンを確認できます。

引用元:SSLサーバー証明書の発行手順 – ラボラジアン

最後に

本記事では、SSL/TLSサーバー証明書の仕組みについて、特に「証明書チェーン」を中心に解説しました。

SSL/TLSサーバー証明書は単なる暗号化の仕組みではなく、以下の重要な役割を担っています:

  • ハイブリッド暗号方式の実現 - 公開鍵暗号方式と共通鍵暗号方式を組み合わせることで、安全性と処理速度を両立
  • 信頼の連鎖 - ルートCA → 中間CA → サーバー証明書という証明書チェーンにより、信頼性を担保
  • なりすまし防止 - デジタル署名により、サーバーの身元を確実に証明

証明書チェーンの仕組みは一見複雑に見えますが、「誰が誰を信頼するか」という信頼の連鎖を技術的に実現したものです。ブラウザに事前インストールされたルートCA証明書を起点として、段階的に証明を検証していくことで、インターネット上での安全な通信を可能にしています。

現在のWebにおいて、HTTPS通信は標準となっており、SSL/TLSサーバー証明書の理解は、Webサービスの開発・運用に携わる全ての人にとって重要な知識となっています。この記事がSSL/TLSサーバー証明書の仕組みを理解する一助となれば幸いです。

Discussion