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

第4回 SSLを利用した暗号化(クライアント編)

矢嶋 聡
2003/06/11

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

3-3 クライアント側でのルート認証機関の登録

 前回の3-2「サーバ証明書の準備」では、IIS側にサーバ証明書をインストールしました。SSLでのアクセスを開始すると、サーバはこのサーバ証明書をクライアントに送信します。

 クライアントは、このサーバ証明書が有効であるかを検証するために、サーバ証明書を作成した証明機関の公開鍵がインストールされている必要があります。そうでなければ、サーバ証明書が正しいものか確認できません。しかし、通常のクライアントのブラウザには、一般的に利用される主要な証明機関の公開鍵がすでにインストールされているので、特別なインストールをしなくとも、サーバ証明書が正しいことを識別できます。よって、一般的な証明機関でサーバ証明書を作成していれば、クライアントには特別な作業は不要です。

 ただし、今回のサーバ証明書は、ローカルな証明機関である「証明書サービス」で作成したので、証明書サービスの公開鍵(厳密には証明書サービス自身の公開鍵を含む証明書)をクライアントにインストールする必要があります。この後は、3-2「サーバ証明書の準備」で作成した証明書サービスの証明書「MyRoot.cer」をクライアントにインストールする作業を順に説明します。

 今回のサンプルでは、1台のマシンがサーバ、かつクライアントです。この同じマシンに、MyRoot.cerをインストールします。これをインストールする最も簡単な方法は、Internet Explorerを使うことです。Internet Explorerを使って、このマシンに証明機関の証明書をインストールすると、その情報はブラウザからアクセスする際に適用されるだけでなく、同じマシンで動作する .NET Frameworkアプリケーションにも適用できます。実は、Internet Explorerは単なるブラウザではなく、さまざまなWindowsアプリケーションが、インターネット経由でアクセスする際に必要な構成を行うことができます。この構成は、Windowsフォームなどの.NET Frameworkアプリケーションにも影響します。

 ここで、Internet Explorerを起動してください。試しにMyRoot.cerをインストールしていない状態で、次のアドレスにアクセスしてみてください*1。maunaの部分は、皆さんのサーバ名です。このサーバはローカルサーバですが、localhostとは入力しないでください(理由は後で説明します)。また、httpではなくhttpsである点に注意してください(もし、第1回「認証によるクライアントの識別」において、IIS側の認証としてWebSrv1に基本認証を選択していた場合、匿名アクセスに戻してください)。

https://mauna/WebSrv1/Service1.asmx

*1 編集部注: ここでは仮想ディレクトリ「WebSrv1」内にあるService1.asmxでXML Webサービスが実装されているものとします。

 図21のような警告ダイアログが表示されます。これは、SSLの開始手続きとして、クライアントがサーバ証明書をダウンロードしたのですが、この証明書を作成した証明機関の情報がクライアント側(ブラウザ側)にないので、警告を発したのです。エクスクラメーション・マーク(!)の後の文章には、サーバ証明書を作成した証明機関が信頼できない旨が記載されています。

図21 サーバ証明書の発行元である証明機関の情報がないので警告を発する

 実は、このダイアログで[はい]ボタンをクリックすれば、強制的にSSLは開始します。しかし、ここでは警告を出さないようにして、スムーズに動作するように構成してみましょう。この警告ダイアログは、[はい]ボタン、または[いいえ]ボタンをクリックして閉じてください。

 Internet Explorerのツールバーから[ツール]−[インターネットオプション]を選び、表示される[インターネットオプション]ダイアログボックスで、[コンテンツ]タブをクリックします。次に中央に表示される[証明書]ボタンをクリックします。すると、クライアント側(ブラウザ側)にインストールされた証明書を管理する画面が開きます(図22)。

図22 ブラウザ側の証明書を管理する画面

 この画面の左側やや下部にある[インポート]ボタンをクリックします。すると、証明書のインポート・ウィザードが開きます(図23)。

図23 証明書のインポート・ウィザード

 このウィザードを使って、証明書サービスの証明書「MyRoot.cer」をインストールし、これをルート証明機関になるように設定します。[次へ]ボタンをクリックしながら、次に挙げる設定を行い、ルート証明機関として登録してください。

(インポートする証明書ファイル)
 

・ファイル名:3-2「サーバ証明書の準備」で作成した証明書サービスの証明書MyRoot.cer(証明書ストア)

   
 

・「証明書をすべて次のストアに配置する」オプションを選択

   
 

・[証明書ストア]欄は、[参照]ボタンをクリックし、「信頼されたルート証明機関」を選択

 ウィザードで[完了]ボタンをクリックすると、「次の証明書をルートストアに追加しますか?」と問うメッセージ・ボックスが表示されるので、[はい]ボタンをクリックし(図24)、さらに[OK]ボタンをクリックします。

図24 ルート証明機関としての登録確認

 図22「ブラウザ側の証明書を管理する画面」の[証明書]ダイアログボックスまで戻ったら、[信頼されたルート証明機関]タブを選んでください。ルート証明機関の一覧に、いま登録した証明機関、つまり証明書サービスの情報が登録されているはずです(図25)。筆者のサンプルでは、Yajima Root CAです。

図25 ルート証明機関の一覧

 これで登録は済みました。なお、登録したのは証明書サービスの証明書である点に注意してください。サーバ証明書を登録したわけではありません。サーバ証明書は、毎回ダウンロードされます。

 では、いったんブラウザを閉じて再起動し、再び次のアドレスにアクセスしてください(maunaはサーバ名です)。

https://mauna/WebSrv1/Service1.asmx

 今度は、警告メッセージも出ずに問題なく、HTML説明ページが開きます。アドレスは、「https://」で始まる点に注意してください。

 なお、URLのサーバ名部分をlocalhostにしてアクセスすると、図21「サーバ証明書の発行元である証明機関の情報がないので警告を発する」と同様の警告メッセージが表示されます。Internet Explorerはサーバ証明書を受け取ると、サーバ証明書に含むサイト名とURLのサーバ名が一致するかチェックし、一致しない場合は警告を発するのです。今回、URLにlocalhostと指定せず、わざわざサーバ名を指定したのは、この警告表示を防ぐためです。

 次に、WinApp2クライアント・アプリケーションからもアクセスしてみましょう*2。このクライアント・アプリケーションのソリューションWinApp2.slnを開いて、WinApp2プロジェクトを編集可能な状態にしてください。

*2 編集部注:WinApp2クライアント・アプリケーションは、フォーム上の[実行]ボタンがクリックされるとXML Webサービスを呼び出すWindowsアプリケーションです。これについては、1-3「クライアントからのログオン」を参照していください。

 既存のままで実行すると、通常のHTTPでアクセスしようとするので、アクセスを拒否され、次のようなメッセージが表示されます(このメッセージが出たら、[終了]ボタンをクリックして、アプリケーションは終了してください)。

図26 HTTPではアクセスできない

 ここで、ボタンのイベント・ハンドラButton1_Clickを次のように変更して、プロキシ・クラスのアドレスに、明示的にSSLを使うよう指定してください(4行目)。

1: Private Sub Button1_Click(... 省略...) Handles Button1.Click
2:     Dim srv As New localhost.Service1()
3:     Dim n As Integer
4:     srv.Url = "https://mauna/WebSrv1/Service1.asmx"
5:     n = srv.Add(200, 300)
6:     TextBox1.Text = CStr(n)
7: End Sub
[リスト1]

 このコードを入力して実行すれば、SSLを使って接続を行い、今度は正しく動作して計算結果500が求められるはずです。また、4行目で「http://」に変えて、アクセスに失敗することも確認してみましょう。

 以上で、SSLによるXML Webサービスへのアクセスができました。End of Article

VB.NETによる XML Webサービス開発

本記事は@ITハイブックスシリーズ「VB.NETによる XML Webサービス開発」(インプレス)から、一部の内容を編集し転載したものです。本書の詳細は「@ITハイブックス」サイトでご覧いただけます。
 
 
インデックス・ページヘ  「連載 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 記事ランキング

本日 月間