連載 XML Webサービスのセキュリティ実装

第3回 SSLを利用した暗号化(サーバ編)

矢嶋 聡
2003/06/04
Page1 Page2 Page3

 
 本記事は、インプレスが発行する書籍『VB.NETによるXML Webサービス開発』の第10章「XML Webサービスのセキュリティ実装」を、許可を得て転載したものです。同書籍に関する詳しい情報については、本記事の最後に掲載しています。

3-1 SSLとは?

 本節では、サービスとクライアントとの間でのやりとりで、データを暗号化する方法を説明します。暗号化のためにはSSLを使用し、実際にサンプルWebSrv1にアクセスする実験を行います*1。まず、本項ではSSLの基本事項とSSLのために必要な準備を説明します。本項「POINT 暗号化とSSL」は、SSLなどの暗号化に関連した一般知識をまとめたものです。すでにご存じの方は「POINT 暗号化とSSL」を読み飛ばしても構いません。

*1編集部注:「WebSrv1」はVisual Studio .NETで作成したXML Webサービスのプロジェクト名です。

 なお、以降の手順のとおり実験を行うには、Windows 2000上に「証明書サービス」をインストールしておく必要があります。

 本項「POINT 暗号化とSSL」を元に、IISでSSLを使用するための準備として行うべきことをまとめると、次のようになります。

  • サーバ固有の1対の公開鍵と秘密鍵を用意します。
  • 証明機関に要求して、サーバの公開鍵の証明書を作成します。
  • クライアントに証明機関の公開鍵がなければ、クライアントに証明機関の公開鍵(証明機関自身の証明書)をインストールします。

 今回は、わざわざ第三者の証明機関に証明書を作ってもらうわけにはいかないので、Windows 2000などで提供される「証明書サービス」を利用します。証明書サービスはイントラネットなどで利用できる、証明機関に相当するWindows上のサービスです。

■POINT 暗号化とSSL

■共通鍵暗号化方式

 この暗号化方式は特定のキーの値で暗号化し、同じキーでのみ元のデータに復号できる方式です。データを暗号化して送るためには、送信側と受信側で同一のキーを持つ必要があります。このキーを使って、双方向で暗号化と復号化ができます。このようなキーを「共通鍵」といいます。1人対100人など、複数の人に送信する場合、101人すべてが同じキーを持つことになります。そのため、101人すべての人が、外部にキーを漏らさないよう管理する必要があります。

■公開鍵暗号化方式

 この暗号化方式は、1対の公開鍵(公開キー)と秘密鍵(秘密キー)を使う暗号化方式で、特定の公開鍵で暗号化したものは、対応する秘密鍵でのみ復号化できます。また、逆に特定の秘密鍵で暗号化したものは、特定の公開鍵でしか復号化できません。秘密鍵は1人の個人が管理するもので、公開鍵は文字通り公開されます。どちらの鍵(キー)で暗号化するかによって用途が異なります。公開鍵で暗号化するのは、秘密鍵を持つ特定の個人あてとして、他人に見られたくない親展情報を送る場合に使います。一方、秘密鍵で暗号化した場合、公開鍵を持った受信者すべてが復号化できますが、その秘密鍵に対応した特定の公開鍵でしか復号化できないので、秘密鍵を持つ人が作成して暗号化したデータであることが確認できます。つまり、秘密鍵で暗号化する目的は、途中で改ざんされずに、確かに本人が作成したことを保証することです。

 ただし、秘密鍵と公開鍵のやりとりを正しく成立させるには、正しい公開鍵が配布される必要があります。

 例えば、太郎さんが自分の秘密鍵を使って、相手と情報のやりとりをする場合、太郎さんの公開鍵が相手に正しく配布されなければなりません。しかし、次郎さんが太郎さんの公開鍵だと嘘をついて、次郎さん自身の公開鍵を配布したら、この公開鍵を使って暗号化された情報は、次郎さんに見られてしまいます。正しい公開鍵を配布する仕組みが必要です。そのためには次に説明する証明書が必要になります。

■証明機関と証明書

 先に触れたように公開鍵暗号化方式では、正しい本人の公開鍵を配布することが重要になります。これを実現するために、第三者の「証明機関(例えば、VeriSignなど)」が、特定の個人の公開鍵であることを保証する「証明書」を発行するという仕組みがあります。

 例えば、太郎さんの証明書には、太郎さんの公開鍵が含まれており、証明機関によって暗号化された情報が含まれています。暗号化には、証明機関の秘密鍵が使われており、この証明書を復号して正しいものであることを検証するには、証明機関の公開鍵が必要です。一般に多くのブラウザでは、初めから証明機関の公開鍵がインストールされています。そのため、インターネット経由で受け取った太郎さんの証明書は、証明機関の公開鍵で復号され、正しいフォーマットか検証され、無事に太郎さんの公開鍵が届くわけです。もし、途中で太郎さんの公開鍵を含む証明書が改ざんされたら、認証機関の公開鍵で復号しても、有効なフォーマットにならず、偽物であることが発覚します。

 また、証明機関の公開鍵自身も、証明書によって配布されることがあります。証明機関自身の公開鍵についての証明書は、別の証明機関によって作成され証明されることもあり、さらにその公開鍵も、また別の証明機関によって証明するというように、階層構造になることもあります。このように連鎖すると、連鎖の最後は自分自身で自分自身の公開鍵を証明する証明機関が現れ、そのような証明機関を「ルート証明機関」と呼びます。また、別の証明機関から証明される証明機関を「中間証明機関」と呼びます。

 Internet Explorerにも証明機関(の公開鍵)がすでにインストールされています。Internet Explorerのメニューから[ツール]−[インターネットオプション]を選び、[コンテンツ]タブを選択して、[証明書]ボタンをクリックすると、[ルート証明機関]や[中間証明機関]などのタブがあることが分かります(図10)。

図10 Internet Explorerにインストールされた証明機関(の公開鍵)

■SSL(Secure Sockets Layer)

 SSLは、インターネット上の、クライアントとサーバとの間で広く利用される暗号化のプロトコルです。IISでも利用することができます。URLでアクセスするときは「https://〜」と指定します。

 この方法では、クライアントとサーバとの間で、一時的な共通鍵暗号化方式を使って、暗号化と復号化を行っています。この共通鍵は一時的にクライアントが生成するもので、安全にサーバに伝える必要があります。そのためにクライアントは、サーバ側の公開鍵を使ってこの共通鍵を暗号化し、サーバに送ります。そうなると今度は、安全な方法でサーバの公開鍵をクライアントに送る必要があり、サーバ側の公開鍵は証明機関によって作成される証明書に含め、証明書として送る必要があります。

 これを実際のアクセスの手順で説明すると、典型的には次のようになります(図11)。

クライアントがSSLでのアクセスをサーバ要求します。

サーバは、サーバの公開鍵を含む証明書をクライアントに送ります。

クライアントは、証明機関の公開鍵を使って、証明書を復号、検証を行い、サーバ側の公開鍵を手に入れます。

クライアントは、一時的な共通鍵を生成し、サーバの公開鍵で暗号化して、サーバに送ります。

サーバは、クライアントから暗号化された共通鍵を受け取り、自分の秘密鍵で復号し、共通鍵を手に入れます。

同じ共通鍵で、クライアントとサーバは通信を始めます。

図11 SSL(Secure Sockets Layer)の手順

 この手順のポイントは2つあります。1つは、手順のようにサーバが公開鍵を安全に送るために、サーバの公開鍵の証明書が必要な点です。もう1つは、送られて証明書を検証するために、クライアントにあらかじめ証明機関の公開鍵が必要である点です。IISでSSLを実現するためにも、この2点を留意する必要があります。


 INDEX
  連載 XML Webサービスのセキュリティ実装
  第3回 SSLを利用した暗号化(サーバ編)
  3-1 SSLとは?
    3-2 サーバ証明書の準備(1)
    3-2 サーバ証明書の準備(2)
 
インデックス・ページヘ  「連載 XML Webサービスのセキュリティ実装」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間