SSLってどんな技術でできてるの?~鍵を使った暗号化その4 公開鍵証明書編~

SSLってどんな技術でできてるの?~鍵を使った暗号化その4 公開鍵証明書編~

前回は、公開鍵暗号方式の一つ、RSAについて紹介しました。今回は公開鍵に付与する証明書について紹介します。クライアントにとって見ず知らずのサーバから送られてきた公開鍵、本当に信頼してもよいのでしょうか? 公開鍵に証明書を付与することによって、誰が送ってきた公開鍵なのか、わかるようになります。

その公開鍵、安全ですか?

今回のコラムでは、証明書 と呼ばれるデータについてご紹介します。
前回までのコラム の中で、SSL/TLSでの暗号化通信時には公開鍵暗号方式が利用されているとご紹介しました。

公開鍵による暗号化では、次のように行いますね。

  1. サーバ が公開鍵・秘密鍵のペアを作成
  2. サーバ からクライアント(ブラウザ)に 公開鍵 を渡す
  3. クライアント は、機密データ(プリマスタシークレット)を 公開鍵で暗号化
  4. クライアント は、暗号化した機密データ をサーバに返す
  5. サーバ は、サーバの持つ 秘密鍵によって復号化 し、内容を確認

その際、クライアントはサーバから送られてきた 公開鍵を利用 して 機密データの暗号化 をします。果たして、この公開鍵は、暗号化通信していきたい目的のサーバから 正しく送られてきた公開鍵 なのでしょうか。もしかしたらクライアントとサーバの間に介入してきた、能動的な攻撃を行う偽のサーバ から送られてきた公開鍵の可能性もあるのではないでしょうか…?

誰から送られてきた公開鍵?

クライアントは どのようにしてサーバから送られてきた公開鍵を安全だと判断 するのでしょうか。
どのようにして公開鍵を送ってきた相手が目的のサーバだと判断するのでしょうか。その謎を紐解いていきます。

証明書とは?

SSL/TLSで採用されている ハイブリッド暗号システム では、暗号化通信を始める前に以下のような手順を踏んでいました。

  1. 暗号化アルゴリズムの提案と合意
  2. 証明書の提示
  3. 共通鍵生成のためのデータの送付と共通鍵生成
  4. 合意した暗号への切り替えと暗号化通信の開始

(筆者公開過去コラム「SSLって実際何してるの?」より。)

上記の (2) の手順にて証明書という言葉がありますね。

通信相手のサーバから送られてきた公開鍵が果たして信用できるものなのかはこの 証明書を利用して判断 します。ここでいう証明書は、正式には 公開鍵証明書(Public Key Certificate) と呼び、クライアントに送付された 公開鍵が確かに公開鍵の発行者のものであると認めるための電子データ です。

では、​証明書は一体誰が作成することができる のでしょうか。

証明書は、認証局(Certification Authority : CA) によって発行されます。認証局は何か国際的な組織などではなくても、個人や企業が認証局を作ることが可能です。

証明書を発行する際の手順

  1. 証明書を発行してもらいたいサーバは キーペアを生成 します。
  2. サーバは、生成した 公開鍵を認証局に送り ます。これは公開鍵に対して、認証局で証明書を作成してもらうためです。
  3. 認証局は、受け取った公開鍵がそのサーバのものなのか確認 します。この際、第三者データベースを使用して確認したり、担当者と対面し確認を行ったりします。
  4. 認証局はサーバの公開鍵に認証局で発行したキーペアのうち、秘密鍵を使用して署名を行い、証明書を発行 します。

認証局が発行した証明書を受け取り、証明書をサーバにインストール することによって、クライアントに送れるようになります。

誰の公開鍵?…証明書を確認しましょう!!

では、なぜ証明書データを見ることによって、送付された 公開鍵が安全なものであると判断できるのか をご紹介していきます。

証明書 には、公開鍵発行者の名前(会社名の場合もありますし、個人名の場合もあります)や所属、メールアドレスなどの 個人情報および公開鍵の情報が記載 されています。

クライアントは、サーバ側から 公開鍵を含む証明書 を受け取ります。これから暗号化通信を行っていくサーバが、間違いなく通信していきたい目的のサーバであることを確認するために、クライアントを利用している人間が、証明書の内容を確認 します。そして、その内容を元にその後の暗号化通信を継続するかを決定 します。

証明書の中身

証明書の内容を確認する際には、認証局が公開する公開鍵を使用して検証 することができます。認証局の公開鍵で検証作業ができれば、その証明書に含まれているサーバの公開鍵は確かにその通信していきたいサーバの公開鍵であることが分かり、クライアントはサーバの正しい公開鍵を間違いなく入手できたことが分かります。

ただ、証明書が送られた=安全というわけではありません。あくまで証明書はその公開鍵を作成した本人であることが間違いないと示しているものなので、証明書を発行した人間またはサーバをクライアントの利用者が信用するかはまた別問題 となります。

すべての認証局が善意で証明書を発行しているわけではなく、悪意を持ったサーバとグルの認証局があるかもしれない、というわけです。
いかがだったでしょうか。次回以降でも、暗号化の仕組みについてさらなる内容をお届けするつもりです。おたのしみに!

記事は、予告なく変更または削除される場合があります。
記載された情報は、執筆・公開された時点のものであり、予告なく変更されている場合があります。
また、社名、製品名、サービス名などは、各社の商標または登録商標の場合があります。