連載
» 2001年03月31日 00時00分 公開

SOAPの仕掛け(2):SOAPのセキュリティはどうなっている? (3/3)

[米持幸寿,日本アイ・ビー・エム株式会社]
前のページへ 1|2|3       

XML用のセキュリティ・スイートが登場

 JavaにおいてXMLを操作するときには「XML for Java」が非常に有名だが、XMLにセキュリティをかけるためのツールとして「XMLセキュリティ・スィート for Java(以下XSS4J)」がある。これを紹介しよう。

 XSS4Jは、IBMのalphaWorks(http://www.trl.ibm.com/alphaWorks/)からダウンロードできるJavaのライブラリである。利用する機能によって若干違いがあるが、前提として以下のようなほかのライブラリが必要である。

  • JDK 1.1またはJava 2
  • Xerces 1.2以降
  • Xalan 1.2以降
  • JCE
  • JavaMail

XSS4Jが提供する機能

XSS4Jでは、次の機能を提供している。

■XMLアクセス制御

 対象(Object)、主体(Subject)、操作(Action)の3つに加え、条件(Condition)、必須処理(ProvisionalAction)から構成されるポリシーによって、XMLへのアクセスを制限し、権限のある部分のみを含むViewを作成したり、更新のログを取ったりする機能を提供する。

 具体的な例を挙げると「Aさん(Subject)は、2001年4月以降ならば(Condition)、ElementX(Object)を読むこと(Action)ができる、がしかし、そのアクセスはログされなければならない(ProvisionalAction)」といった感じだ。

■ASN.1/XML変換

 ASN.1は、SNMP、LDAPなどの通信プロトコル、X.509のようなセキュリティ・プロトコル、PKCSのようなデータ・フォーマットなどに幅広く使われている、構造化データを表現するためのフレームワークである。このライブラリではASN.1とXMLとの間で相互変換機能を提供する。次の種類のデータ構造に対応している。

  • X.509
  • LDAP
  • PKCS#7
  • PKCS#10
  • SNMP

■XML署名の実装

 前項で説明した、XMLの署名を実現するライブラリである。電子署名の技術は暗号化技術の上に成り立っている。そのため、署名するときと検査するときに使用される暗号化技術が一致しないと意味がない。XML署名の規約においては、どの暗号化アルゴリズムを使うかを規定している。XSS4Jでのサポート状況は以下のようになっている。

XSS4Jサポート アルゴリズムタイプ アルゴリズム W3C規約上
ダイジェスト SHA1 必須
エンコード Base64 必須
MAC HMAC-SHA1 必須
署名 DSAwithSHA1(DSS) 必須
DSAwithSHA1 推奨
× 正規化 Minimal 推奨
Canonical XML with Comments 推奨
Canonical XML (omits comments) 推奨
構造変換 XSLT オプション
Xpath 推奨
Enveloped Signature* 必須

■エレメント単位の暗号化

 XMLの一部を暗号化するためのライブラリである。エレメント単位の暗号化については、まだ仕様が策定中であり、このライブラリの実装については今後仕様が変更される可能性がある。

  • DOMHASH計算ライブラリ
    XMLツリーの全体、または一部のダイジェスト値をDOMHASHという方式(IETFのRFC2803=http://www.ietf.org/rfc/rfc2803.txt)で計算するライブラリである。

  • XML正規化ライブラリ(XML Canonicalizer)
    XMLタグの揺れを吸収するために、正規化するライブラリである。

Apache-SOAPが提供するセキュリティ機能

 XMLセキュリティ・スイートを使ってセキュリティをかけることにより、SOAP上でも安全にXMLを扱うことができるが、Apache-SOAPには一部のセキュリティ機能が統合されている。それをご紹介しよう。

■SOAP 2.1で追加されたセキュリティ関連の機能

  1. クライアント側HTTPSサポート
    Apache-SOAPでは、SOAPサーバにアクセスするのはSOAPクライアントということになり、それをプログラムとして記述する場合、Apache-SOAPに含まれる「Client-API」を使ってコーディングしたJavaプログラム、ということになる。このとき、HTTPの処理をするのはJavaのライブラリということになり、Webブラウザではない。このため、ランタイムがHTTPのセッションを作るとき、HTTPSに対応していないとSSLが利用できない。Apache-SOAP 2.0以降では、クライアントAPIがHTTPSに対応した。

  2. HTTPプロキシ・サポート
    セキュリティのもう1つの側面として「ファイア・ウォール」がある。HTTPプロトコルでは「プロキシ」という中間サーバを使ってファイアウォールに小さな穴をあけることができる。SOAPでは、HTTPをトランスポートとして使う場合、プロキシを使うことによって、比較的簡単に、しかも安全にファイアウォールを通過させることができる。

  3. HTTP基本認証サポート
    HTTPプロトコルには、シンプルで簡単な認証機能が定義されている。Webブラウザであるページにアクセスしようとしたときに、Webブラウザが持っている機能としてログオン用のダイアログが表示されることがあるが、あれが「基本認証(Basic Authentication)」であり、HTTPプロトコル上に定義されている。Apache-SOAPでは、HTTP基本認証を使ってログオンさせるための機能が備わっている。

 また、SOAPを使ったアーキテクチャの実装としてIBMのalphaWorksから配布されている「Web Services Toolkit(WSTK)」には、次のものが入っている。

  • SOAPデジタル署名Webサービス
  • SOAPデジタル署名WebサービスのBtoBデモ

 このSOAPデジタル署名においては、日本国内でもクリティカル・アプリケーションにおける事例が紹介されるなど現実的な実装となっており、「SOAP Security Extensions: Digital Signature(http://www.w3.org/TR/SOAP-dsig/)」としてW3Cに提案が行われている。

 以上のようなXMLのセキュリティ機能を駆使することによって、XMLを使ってBtoBインテグレーションを安全に行うことができるようになる。

 次回は、SOAPと並べて紹介されることの多い「UDDI」の概説と利用法をご紹介する。

著者紹介

米持 幸寿
日本アイ・ビー・エム株式会社



前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。