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で追加されたセキュリティ関連の機能
- クライアント側HTTPSサポート
Apache-SOAPでは、SOAPサーバにアクセスするのはSOAPクライアントということになり、それをプログラムとして記述する場合、Apache-SOAPに含まれる「Client-API」を使ってコーディングしたJavaプログラム、ということになる。このとき、HTTPの処理をするのはJavaのライブラリということになり、Webブラウザではない。このため、ランタイムがHTTPのセッションを作るとき、HTTPSに対応していないとSSLが利用できない。Apache-SOAP 2.0以降では、クライアントAPIがHTTPSに対応した。 - HTTPプロキシ・サポート
セキュリティのもう1つの側面として「ファイア・ウォール」がある。HTTPプロトコルでは「プロキシ」という中間サーバを使ってファイアウォールに小さな穴をあけることができる。SOAPでは、HTTPをトランスポートとして使う場合、プロキシを使うことによって、比較的簡単に、しかも安全にファイアウォールを通過させることができる。 - 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」の概説と利用法をご紹介する。
Copyright © ITmedia, Inc. All Rights Reserved.