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

第5回 ファイアウォールへの適用

矢嶋 聡
2003/06/18

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

4-1 サービス側の構成

 一般的には、社内LANと外部インターネットとの接続部分には、プロキシ・サーバなどのファイアウォールがあります。XML Webサービスを外部に公開するのであれば、そのことを考慮する必要があります。本節では、この点を説明します。ただし、ファイアウォールなどのインフラがないと実際に確認できないので、ここではサンプルは作成せずに、必要な考慮事項やコードの書き方を説明します。

 XML Webサービスをファイアウォールの外へ公開するためには、HTTPプロトコルが利用でき、かつ利用できるポートが存在しなければなりません。IISの既定の設定では、HTTPプロトコルで80番のポート、SSLで443番のポートを使用します。これが、ファイアウォール経由で利用できるかを確認する必要があります。

 場合によっては、特定のポート番号に変える必要があるかもしれません。この場合は、ASP.NETやXML Webサービス側の設定を変えるのではなく、IIS側の設定を変えることになります。IISの管理ツール「インターネット・インフォメーション・サービス」で、「既定のWebサイトのプロパティ」ダイアログボックスを開き(図12「既定のWebサイトのプロパティ」参照)、このダイアログボックスで[Webサイト]タブを選びます(図27)。この画面上部で、ポート番号を指定できます。なお、ポート番号はサイト単位で設定するので注意してください。

図27 HTTPとSSLのポート番号の指定画面

 設定で必要なのはこれだけです。XML Webサービスのプログラムそのものは影響を受けません。

4-2 クライアント側の構成

 一般的にクライアント側の社内LANも、外部インターネットに接続する部分にはプロキシ・サーバ(Proxy Server)などのファイアウォールが存在しています。通常、ブラウザがファイアウォールを通過して外部インターネットにアクセスするには、あらかじめブラウザにファイアウォールのアドレスなどを指定する必要があります。

 このような設定は、プロキシ・クラスにも用意されています*1。プロキシ・クラスには、Proxyプロパティが用意されており、このプロパティにファイアウォールに関する設定を行います。

*1編集部注: プロキシ・クラスは、Visual Studio .NETでXML Webサービスのクライアントを作成する際に、XML WebサービスへのWeb参照を行うと自動的に生成されます。以下のコード例では、localhost.Service1がXML Webサービスのプロキシ・クラスです。また、4行目で呼び出しているAddメソッドが、XML Webサービスによって提供されるメソッドです

 例えば、ファイアウォールであるプロキシ・サーバのアドレスが「http://mysrv1:80/」ならば次のように指定します(ここでは、「プロキシ」という言葉が、プロキシ・クラスとプロキシ・サーバの両方で登場しますが、もちろん、この2つはまったく異なるものなので混同しないでください)。

1: Dim srv As New localhost.Service1()
2: Dim n As Integer
3: srv.Proxy = New WebProxy("http://mysrv1:80/")
4: n = srv.Add(100,200)
例 プロキシ・サーバのアドレスを指定する

 3行目のWebProxyオブジェクトが、ファイアウォールの設定情報を持つオブジェクトです。

 また、Internet Explorerにはプロキシ・サーバのアドレスを指定することができます。Internet Explorerの設定をそのまま流用するには、上記の3行目を次のように記述します。

3: srv.Proxy = WebProxy.GetDefaultProxy()

 GetDefaultProxyメソッドは、Internet Explorerのプロキシ・サーバの設定をそのまま参照するメソッドです。ただし、Internet Explorerでの設定が動的なスクリプトを参照している場合は利用できません。このメソッドを使うには、Internet Explorer側で、静的にプロキシ・サーバの情報を設定しておく必要があります。このほかにも、プロトコルごとに詳細に指定することもできます。詳しくはオンライン・ドキュメントを参照してください。

 これでクライアントのプロキシ・クラスは、プロキシ・サーバ経由で、XML Webサービスにアクセスできます。

 なお、単にプロキシ・クラスからXML Webサービスにアクセスするポート番号を変えたい場合は、どうすればよいでしょう。それは簡単です。以下の3行目のように、アクセスするURLにポート番号を含めればよいだけです。

1: Dim srv As New localhost.Service1()
2: Dim n As Integer
3: srv.Url = "http://localhost:8080/WebSrv1/Service1.asmx"
4: n = srv.Add(100,200)
例 ポート番号8080を指定する

 以上、セキュリティに関するさまざまな概念、設定方法、コードの書き方について説明しました。XML Webサービスの範囲内だけでなく、ほかのセキュリティとの関連も理解できたことと思います。

本連載のまとめ

  • 認証を受けてXML Webサービスにアクセスするには、まず、クライアントはIISの認証を受ける必要があり、その後でASP.NETの認証を受けることになります。

  • ASP.NETの認証方法には、Windows認証、フォーム認証、およびパスポート認証があります。Windows認証は、IIS側の認証をそのまま流用する方法です。フォーム認証とパスポート認証では、未認証ユーザーがログオン・フォームにリダイレクトされます。フォーム認証では、独自の認証ロジックを実装し、パスポート認証では、マイクロソフトが提供する認証サービスを利用します。

  • ASP.NETでの認証設定は、Web.configファイルの<authentication>要素に記述します。Windows、Forms、Passport、Noneの中から選択します。

  • IIS側の認証設定は、管理ツール「インターネット・インフォメーション・サービス」から仮想ディレクトリ単位(アプリケーション単位)に行うことができ、匿名アクセス、基本認証、統合Windows認証などの認証方法から選択します。

  • クライアントがプロキシ・クラスを使用する際に、特定のユーザー・アカウントを指定してXML Webサービスにアクセスするには、プロキシ・クラスのCredentialsプロパティにユーザー情報を設定します。このプロパティに任意のユーザー名やパスワードを指定するにはNetworkCredentialsオブジェクトを使います。また、統合Windows認証を使って、クライアントから透過的にログオンするには、CredentialCache.DefaultCredentialsを使います。

  • いったん、ログオンすると(認証すると)、特別な制限がない限り、その仮想ディレクトリ(アプリケーション)内に含まれるサブフォルダやファイルに自由にアクセスできます。これを制御するには、承認(Authorization)を行います。

  • URL承認では、Web.configファイルの<authorization>要素を使って、サブフォルダ単位、ファイル単位にアクセスを制御できます。

  • ファイル承認を使って、ログオン・ユーザーごとにアクセスを制御するには、偽装を行う必要があります。偽装を行わない既定の構成では、ASP.NETランタイムはASPNETユーザー・アカウントを使ってアクセスします。

  • Web.config構成ファイルの<identity>要素では、ログオン・ユーザーに偽装させるほか、特定のユーザー・アカウントに偽装させる方法も選択できます。特定のユーザー・アカウントに偽装する場合、Windows 2000では「オペレーティング・システムの一部として機能」というユーザー権利をASPNETに与える必要があります。

  • SSL(Secure Sockets Layer)では、サーバ側の公開鍵をクライアントに送ります。これを安全に行う方法の1つとして、証明機関によって発行される証明書の中に、サーバ側の公開鍵を含めてクライアントに送る方法があります。一般的に、クライアントには証明機関の公開鍵があるので、この証明書を復号し、サーバ側の公開鍵を確実に入手することができます。

  • IISでSSLを使うには、まずサーバ証明書を作成します。サーバ証明書を作成するには、まず「証明書要求ファイル」を作成します。次に、「証明書要求ファイル」を証明機関に送付して証明書作成を依頼するか、または、証明書サービスを利用して独自に証明書を作成します。作成した証明書は、IISのサイト単位にインストールします。

  • IISが、SSLのために使用するサーバ証明書が一般的な証明機関によって作成されたものならば、クライアント側には特別なインストール作業は必要ありません。通常、クライアントには、一般的な証明機関の公開鍵がすでにインストールされています。

  • クライアントに証明機関の公開鍵をインストールする簡単な方法は、Internet Explorerを使う方法です。Internet Explorerには、Windowsアプリケーションがインターネットにアクセスする際に利用するライブラリが含まれており、Internet Explorerから設定する内容は、これらのライブラリにも影響を与えます。

  • XML Webサービスを特定のポートで公開するようポート番号を変更するには、ASP.NET側の設定を変えるのではなく、IIS側の設定を変更します。IISでは、サイト単位で特定のポートを公開できます。

  • プロキシ・クラスのProxyプロパティを利用すると、プロキシ・サーバなどのファイアウォールを経由して、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 記事ランキング

本日 月間