SOAPメッセージにSOAP電子署名を付加するための設定手順について説明します。
SOAP電子署名を付加するアプリケーションの実装は、Webサービス情報の変更で行います。アプリケーション・プログラムの変更はありません。
ただし、Messaging方式のアプリケーションの場合は、SOAP電子署名の署名対象となる要素にID型の属性を追加することで、署名対象の設定を簡易的に行うことが可能になります。
原本保証機能(SOAP電子署名、XML暗号)では、以下の属性をID型の属性とみなします。
名前空間URI:http://schemas.xmlsoap.org/ws/2002/07/utility |
SAAJ-APIを使用して、SOAPBodyに“body”という値のID型の属性を追加する例を以下に示します。
..... String prefix = "wsu"; String uri = "http://schemas.xmlsoap.org/ws/2002/07/utility"; SOAPEnvelope env = ...; SOAPBody body = env.getBody(); body.addNamespaceDeclaration(prefix, uri); body.addAttribute(env.createName("Id", prefix, uri), "body"); ..... |
また、添付ファイル(Attachmentデータ)をSOAP電子署名の署名対象とする場合、添付ファイルにMIMEヘッダ“Content-Id”を追加する必要があります。
以下に、Attachmentデータに“sample.jpg”という値を持つMIMEヘッダ“Content-Id”を追加する例を示します。
import javax.xml.soap.*; ..... AttachmentPart _ap = ...; _ap.setContentType("image/jpeg"); _ap.setContentId("sample.jpg"); ..... |
SOAP電子署名を付加するためには、秘密鍵および秘密鍵に対応したサイト証明書が必要になります。詳細については“B.2 SOAPサービスでセキュリティ機能を使用するための環境設定”を参照してください。
認証局から証明書を取得する場合、鍵の使用用途としてSOAP電子署名用のものを取得する必要があります。
SOAP電子署名付加の設定をするには、Webサービス情報編集ツールを使用します。
以下にサーバシステム環境で表示される詳細情報を表示した画面を示します。
なおここでは、RPCアプリケーションの画面を例に説明します。
Webサービス識別名
Webサービスの識別名を入力します。
Webサービス識別名の指定方法については、Interstage V9.1.0の“SOAPサービス ユーザーズガイド”の“Webサービス情報の管理”の“Webサービス識別名とURL”を参照してください。
[サーバ機能]:レスポンス送信設定:SOAP署名付加
[クライアント機能]:リクエスト送信設定:SOAP署名付加
SOAPメッセージのリクエスト / レスポンス送信時にSOAP電子署名の付加の有無を設定します。
デフォルト値は“しない”です。
[サーバ機能]:レスポンス送信設定: “詳細”ボタン
[クライアント機能]:リクエスト送信設定:“詳細”ボタン
SOAP電子署名付加設定の“詳細”/“標準”切り替えを行うボタンです。
上図は、“詳細”ボタンを押下した状態です。
SOAP署名対象
署名の対象を指定します。
署名対象のXMLタグに、ID属性が付いている場合やAttachmentデータ(添付ファイル)を署名する場合、“URI/ID”を選択して署名対象を記述します。
XPathを使用して署名対象を指定する場合、“XPath”を選択して署名対象を記述します。
署名対象の指定方法については、“署名対象の指定方法”を参照してください。
XPath
署名対象の指定方式を設定します。設定方法は“XPath”もしくは“URI/ID”の2択です。デフォルトは“XPath”です。
“追加”ボタン
“署名対象”は任意個指定が可能です。2箇所以上に署名する場合、“追加”ボタンを押下し、署名対象を追加してください。
[サーバ機能]リクエスト送信設定:宛先role(actor)名指定
[クライアント機能]レスポンス送信設定:宛先role(actor)名指定
SOAPメッセージの中継者(intermediary)に何らかの処理を行わせたい場合に、中継者のURIを指定します。省略した場合には、SOAPメッセージの最終到達者(ultimate destination)に対する振る舞いを指定していることになります。
[サーバ機能]リクエスト送信設定:mustUnderstand
[クライアント機能]レスポンス送信設定:mustUnderstand
SOAPメッセージの受信者がヘッダ中の要素を必ず処理しなければならないのか、選択可能であるのかを指定します。
デフォルトは“処理を行う必要なし”です。
Webサービス情報編集ツールでSOAP電子署名の付加機能を有効にすると、設定した内容に基づき送信するSOAPメッセージに対して自動的にSOAP電子署名を付加します。
詳細を設定しない場合、SOAPメッセージのSOAPボディ要素に記載した内容からコメントを削除し、XML正規化(canonicalization)した結果に対して署名します。
SOAP電子署名付加については、soapsecsignconfコマンドを使用しても設定可能です。soapsecsignconfコマンドについては、“リファレンスマニュアル(コマンド編)”を参照してください。
■署名対象の指定方法
SOAP電子署名では、以下の2種類を署名対象とすることが可能です。
SOAPエンベロープ内部の任意のノード
IDによる指定
XPathによる指定
Attachmentデータ(添付ファイル)
Content-Idによる指定
●IDによる署名対象の指定
SAAJ-APIを使用してSOAPメッセージを付加した場合、署名対象となる要素にID型の属性を追加しておくことが可能です。SOAP電子署名では、以下の属性をID型とみなします。
名前空間URI:http://schemas.xmlsoap.org/ws/2002/07/utility |
ID型の属性を持つ要素を署名対象とする場合、署名対象を“#”(シャープ文字)の後ろにID型の属性値を指定します。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body xmlns:wsu="http:// schemas.xmlsoap.org/ws/2002/07/utility" wsu:Id="body"> <m:ResponseBody xmlns:m="urn:SampleMsg"> <Response>response string...</Response> </m:ResponseBody> </soapenv:Body> </soapenv:Envelope> |
上記SOAPメッセージに対して署名対象として“#body”を指定すると、<soapenv:Body>およびその内容が署名対象となります。
●XPathによる署名対象の指定
XPath指定の場合、SOAPエンベロープ内すべてのノードに対してXPath式を評価した結果が真となるノードが署名対象となります。
●SOAPボディの内容を署名対象とする場合の指定方法
SOAPボディのみをSOAP電子署名の署名対象とする場合には、以下のように指定します。
ancestor::soapenv:Body |
ここで、“soapenv”はSOAPBodyの名前空間プレフィックスを表します。プレフィックスを変更した場合、XPathで指定する場合にもその値を指定する必要があります。
●任意の要素を署名対象とする場合の指定方法
“urn:sample”という名前空間URIと“localName”という名前を持つ要素をSOAP電子署名の署名対象とする場合、以下のように指定します。
ancestor-or-self::*[local-name()='localName' and namespace-uri()='urn:sample'] |
●Content-Idによる署名対象の指定
SOAPメッセージに含まれる添付ファイル(Attachmentデータ)をSOAP電子署名の署名対象とする場合、署名対象として、“cid:”の後ろにMIMEヘッダ“Content-Id”の値を続けた文字列で指定します。
(2)SOAPメッセージに対するSOAP電子署名の検証
(2-1)SOAP電子署名を検証するアプリケーションの実装
SOAP電子署名を検証するアプリケーションの実装は、Webサービス情報の変更で行います。アプリケーション・プログラムの変更はありません。
(2-2)サイト証明書・認証局証明書の準備
SOAP電子署名を検証するためには、SOAP電子署名を付加した相手のサイト証明書か、そのサイト証明書を発行した認証局の証明書が必要になります。取得した証明書の管理方法については“B.2 SOAPサービスでセキュリティ機能を使用するための環境設定”を参照してください。
(2-3)SOAP電子署名検証の設定
SOAP電子署名検証の設定をするには、Webサービス情報編集ツールを使用します。
以下にサーバシステム環境で表示される詳細情報を表示した画面を示します。
なおここでは、RPCサーバアプリケーションの画面を例に説明します。
Webサービス識別名
Webサービスの識別名を入力します。
Webサービス識別名の指定方法については、Interstage V9.1.0の“SOAPサービス ユーザーズガイド”の“Webサービス情報の管理”の“Webサービス識別名とURL”を参照してください。
処理済HeaderElement:削除しない
リクエスト/レスポンスメッセージを受信後、処理を完了したSOAPヘッダ要素を削除するかどうかを設定します。
デフォルトは“削除しない”です。
Webサービスのrole(actor)名
Webサービスのrole(actor)名を設定する場合に、URI形式で指定します。
2つ以上のrole(actor)名を記述する場合、“,”(カンマ)で区切ります。
Webサービスのrole(actor)名は、SOAPが規定する転送を行う場合の転送路におけるWebサービスの役割名であり、この値に一致する宛先role(actor)名を持つSOAPヘッダ要素のみを処理します。
通常は指定しなくて構いません。
[サーバ機能]:リクエスト受信設定:SOAP署名検証
[クライアント機能]:レスポンス受信設定:SOAP署名検証
SOAPメッセージのリクエスト/レスポンス受信時にSOAP電子署名の検証の有無を設定します。
デフォルト値は“しない”です。
[サーバ機能]:リクエスト受信設定:“詳細”ボタン
[クライアント機能]:レスポンス受信設定:“詳細”ボタン
署名検証設定の“詳細”/“標準”切り替えを行うボタンです。
上図は、“詳細”ボタンを押下(SOAP署名検証IDを表示)した状態です。
SOAP署名検証ID
サーバアプリケーションがリクエスト受信時に署名検証“する”時の詳細設定項目です。プルダウンメニューよりSOAP電子署名の検証で使用するサイト証明書の別名を選択します。
Webサービス情報編集ツールでSOAP電子署名の検証機能を有効にすると、設定した内容に基づき受信したSOAPメッセージに付加されたSOAP電子署名を自動的に検証します。
Interstage SOAPサービスの原本保証機能間で署名を交換する場合は、デフォルトで証明書が添付されてくるため、署名検証で用いるサイト証明書(SOAP署名検証ID)を指定する必要がありません。
SOAP電子署名検証については、soapsecverifyconfコマンドを使用しても設定可能です。soapsecverifyconfコマンドについては、“リファレンスマニュアル(コマンド編)”を参照してください。