このセクションの内容:
認証、暗号化、アクセス制御に関して、万全なセキュリティ対策を取ることを支援するために、SOAtest は業界標準の WS-Security 仕様を完全にサポートする広範なセキュリティ ツールとオプションを備えています。
WS-Security テスト スイートを使ったこの演習では、暗号化/復号化、デジタル署名、および SOAP ヘッダーの追加について説明します。以下は、SOAtest がサポートする主要なセキュリティ ツールとオプションです。
- XML Encryption ツール: XML Encryption ツールを使用すると、Triple DES、AES 128、AES 192、 AES 256 を使って、メッセージの全部または一部を暗号化/復号化することができます。WS-Security モードでは、バイナリ セキュリティ トークン、X509IssuerSerial、およびキー識別子がサポートされます。
- XML Signer ツール: XML Signer ツールを使用すると、ニーズに合わせてメッセージの全部または一部をデジタル署名することができます。時には、文書の一部にデジタル署名し、残りの部分は暗号化することが重要な場合もあります。
- XML Signature Verifier ツール: XML Signature Verifier ツールを使用すると、キー ストア ファイルに保管された公開鍵と秘密鍵を使ってデジタル署名された文書を検証することができます。
- キー ストア: SOAtest でキー ストアを使用すると、キー ストア ファイルに保管された公開鍵と秘密鍵を使ってデジタル署名された文書を暗号化/復号化することができます。JKS、PKCS12、BKS、PEM、および UBER 形式のキー ストアを使用できます。
- ユーザー名トークン、SAML トークン、X509 トークン、カスタム ヘッダー: SOAtest は、カスタム SOAP ヘッダーの送信と、ユーザー名トークンおよび SAML トークンのテンプレートをインクルードします。
この演習が完了すると、 SOAtestTutorial.tst ファイルの "WS-Security" に似たテスト スイートが完成するはずです。
Unlimited Strength Java Cryptography Extension
重要: XML Signature Verifier、XML Signer、XML Encryption ツールを使ってセキュリティ テストを実行するためには、あるいはキー ストアを使用している場合は、Unlimited Strength Java Cryptography Extension をダウンロードしてインストールする必要があります。詳細については 「JCE 前提条件」 を参照してください。
メッセージ レイヤー セキュリティと SOAP ヘッダー
この演習では、書店 Web サービスを使用します。この書店サービスでは、WS-Security の仕様に従って、SOAP ヘッダー要素内でユーザー名とパスワードをサブミットする必要があります。SOAtest には、カスタム ヘッダーを追加する機能が用意されているほか、ユーザー名トークンと SAML トークンを作成するための定義済みテンプレートも用意されています。以下の演習ではユーザー名トークンを使用します。
- 前の演習で作成したプロジェクトを右クリックし、ショートカット メニューから [新規追加] > [テスト (.tst) スイート] を選択します。
- ファイル名を入力し、[次へ] をクリックします。
- [空] を選択して [終了] をクリックします。空のテスト スイート フォルダーが作成されます。
- 追加された新しい テスト スイート: テスト スイート ノードをダブルクリックします。
- 右側の設定パネルで、[名前] フィールドに WS-Security と入力します。
- [保存] ボタンをクリックして WS-Security テスト スイートを保存します。
- 機能テストの演習で追加した Excel: Books データ ソースをコピーし、このテスト スイートに貼り付けます。
- テスト スイート: WS-Security ノードを選択し、[テスト スイートの追加] ボタンをクリックします。
- [空] を選択して [終了] をクリックします。空のテスト スイート フォルダーが作成されます。
- テスト スイートをダブルクリックしてエディターを開き、テスト スイートの名前を Username Tokens にします。
- [保存] ボタンをクリックして Username Tokens テスト スイートを保存します。
- テスト スイート: Username Tokens ノードを選択し、[テストまたは出力の追加] ボタンをクリックします。
- [テストの追加] ウィザードで、左側ペインから 標準テスト を選択し、右側ペインから SOAP Client を選択して [終了] をクリックします。テスト スイートに SOAP Client ツールが追加されます。
- テスト スイート: Username Tokens ノードの下の テスト 1: SOAP Client をダブルクリックします。
- 以下の操作を行って、SOAP Client ツールを設定します。
- [名前] フィールドに SOAP Client - getItemByTitle operation と入力します。
- [WSDL] タブを開き、[WSDL URI] フィールドに以下を入力します。
http://localhost:8080/parabank/services/store-wss-01?wsdl
- [リクエスト] タブを開き、[操作] ドロップダウン メニューから getItemByTitle を選択します。
- titleKeyword 要素を確認し、[パラメータライズ] の値として Keywords を選択します。
- ツールバーの [保存] ボタンをクリックして変更を保存します。
- ツールバーの [テスト] ボタンをクリックしてテストを実行します。必要なセキュリティ ヘッダーがないため、テストが失敗することが分かります。
必要な SOAP ヘッダーを追加するために、以下の操作を行います。
- テスト 1: SOAP Client - getItemByTitle operation ノードをダブルクリックします。
- ツールの設定パネルで [SOAP ヘッダー] タブを開き、[追加] ボタンをクリックします。[新規 SOAP ヘッダーの追加] ダイアログが表示されます。
- WS-Security を選択して [OK] をクリックします。
- SOAP ヘッダーのテーブルに追加された新しいエントリをダブルクリックします。ダイアログが表示されます。
- [タイムスタンプ] タブで [タイムスタンプの送信] チェックボックスをオフにします。
- [ユーザー名トークン] タブを開き、以下の設定を行います。
- [wsse:Username] フィールドに soatest と入力します。
- [wsse:Password] フィールドに soatest と入力します。
- [OK] をクリックします。
- ツールバーの [保存] ボタンをクリックして変更を保存します。
- ツールバーの [テスト] ボタンをクリックしてテストを実行します。今回はテストが成功します。
- Traffic Viewer ノードをダブルクリックし、リクエストで送信された SOAP ヘッダーを参照し、指定した書籍についての情報をサービスが返したことを検証します。
- 今後サーバー レスポンスでのあらゆる変更を警告する回帰コントロールを作成するために、テスト 1: SOAP Client - getItemByTitleOperation を右クリックし、ショートカット メニューから [回帰コントロールの作成/更新] を選択します。
- [レスポンス検証] ウィザードで、[回帰コントロールの作成] > [複数のコントロールを作成] を選択し、[終了] をクリックします。
さらに数回テストを実行した場合、テストは失敗します。なぜなら、price 要素が変わったからです。これまでの演習のステップに従って、動的に変化する price の値を無視してくだい。
XML Encryption ツールの使用
この演習では、前の演習で使用したサービスに似た書店サービスを使用します。この書店サービスは以下の点が異なります。
- リクエスト ボディは、examples\keystores ディレクトリにあるキーストア soatest.pfx を使って暗号化されなければなりません。
- レスポンスも暗号化され、同じキーストアを使って復号化することができます。
まず、キーストアをセットアップする必要があります。
- テスト スイート: WS-Security ノードを選択し、ツールバーの [プロパティの追加] ボタンをクリックします。
- [グローバル プロパティのタイプを選択] ダイアログで、[グローバル キー ストア] を選択し、[終了] をクリックします。
- キー ストアの設定パネルで以下の操作を行って、キー ストアを設定します。
- [名前] フィールドに PKCS12 Keystore と入力します。
- [秘密鍵に同じキー ストアを使用] チェックボックスを必ずオンにします。
- [ファイル システム] ボタンをクリックし、キー ストア soatest.pfx の場所まで移動します。
- Windows:
C:\Program Files\Parasoft\SOAtest\[SOAtest version number]\examples\keystores
- その他:
[SOAtest installation directory]\examples\keystores
- Windows:
- [キー ストア パスワード] フィールドに security と入力します。
- [キー ストア タイプ] ドロップダウン メニューから PKCS12 を選択します。
- [ロード] ボタンをクリックします。
キー ストア中の利用可能な証明書エイリアスのリストが [証明書エイリアス] に表示されます。 - [証明書エイリアス] フィールドで soatest を選択します。
- キー ストアの設定パネルの [秘密鍵] タブを開き、[ロード] をクリックします。
- [秘密鍵エイリアス] に soatest を選択し、[秘密鍵パスワード] に security と入力します。
- ツールバーの [保存] ボタンをクリックします。
ここまでの操作で、XML Encryption ツールを使ったテストをセットアップする準備ができました。より分かりやすくセキュリティ テストを編成するために、暗号化テストのためのフォルダーを新規に作成します。
- テスト スイート: WS-Security ノードを選択し、[テスト スイートの追加] ボタンをクリックします。
- [空] を選択して [終了] をクリックします。空のテスト スイート フォルダーが作成されます。
- 右側パネルの [名前] フィールドに Encryption/Decryption と入力します。
- ツールバーの [保存] ボタンをクリックします。
- テスト スイート: Encryption/Decryption ノードを選択し、[テストまたは出力の追加] ボタンをクリックします。
- 左側ペインから [標準テスト] を選択し、右側ペインから SOAP Client を選択して [終了] をクリックします。テスト スイートに SOAP Client ツールが追加されます。
- 以下の操作を行って、SOAP Client ツールを設定します。
- [名前] フィールドに SOAP Client - getItemByID operation と入力します。
- [WSDL] タブを開き、[WSDL URI] フィールドに以下を入力します。
http://localhost:8080/parabank/services/store-wss-03?wsdl - [リクエスト] タブをクリックします。
- [操作] ドロップダウン メニューから getItemById を選択します。
- id 要素について、その [パラメータライズ] の値として ID を選択します。
- ツールバーの [保存] ボタンをクリックします。
- テスト 1: SOAP Client - getItemByID operation を右クリックし、ショートカット メニューから [出力の追加] を選択します。 [出力の追加] ウィザードが表示されます。
- 左側ペインから リクエスト > SOAP エンベロープ を選択し、右側ペインから XML Encryption を選択して [終了] をクリックします。Encryption Tool が SOAP Client に連結されます。
- 以下の操作を行って、リクエスト SOAP エンベロープ -> XML Encryption ツールを設定します。
- [暗号化] ラジオボタンが選択されていることを確認します。
- [WS-Security] チェックボックスがオンであることを確認します。
- [シンメトリック (ブロック暗号化)] ドロップダウン メニューから AES 256 を選択します。
- WS-Security ページを開き、[フォーム] ボックスで X509BinarySecurityToken が選択されていることを確認します。
- ターゲット要素 ページを開き、[SOAP ボディ/ドキュメント全体] チェックボックスがオンであることを確認します。この設定は XML ボディ要素を暗号化します。
これで、リクエストがサービスに送られるときに、XML Request が暗号化されるように設定されました。 - ツールバーの [保存] ボタンをクリックして変更を保存します。
ここで、SOAP Client テストの XML Response に XML Encryption ツールを追加して、XML レスポンスを復号化できるようにすることができます。
- テスト 1: SOAP Client - getItemByID operation を右クリックし、ショートカット メニューから [出力の追加] を選択します。 [出力の追加] ウィザードが表示されます。
- 左側ペインから レスポンス > SOAP エンベロープ を選択し、右側ペインから XML Encryption を選択して [終了] をクリックします。Encryption Tool が SOAP Client に連結されます。
- 以下の操作を行って、レスポンス SOAP エンベロープ -> XML Encryption ツールを設定します。
- [復号化] ラジオボタンを選択します。
- [キー ストア] ドロップダウン メニューから PKCS12 Keystore を選択します。
- ツールバーの [保存] ボタンをクリックして変更を保存します。
- ツールバーの [テスト] ボタンをクリックしてテストを実行します。
- Traffic Viewer ノードをダブルクリックして、暗号化されたデータを参照します。
- テスト 1: SOAP Client - getItemByID operation ノードを右クリックし、[回帰コントロールの作成/更新] を選択します。
- 表示されたダイアログで、[回帰コントロールの作成] > [複数のコントロールを作成] を選択し、[終了] をクリックします。
回帰コントロールが作成され、レスポンス SOAP エンベロープ -> XML Encryption に自動的に連結されます。 復号化されたレスポンスが回帰コントロールに表示されることが分かります。
最後に、XML レスポンスからの動的な値を無視して、回帰コントロールが毎回失敗しないようにします。
- XML Document -> Diff ノードをダブルクリックし、GUI 右側のパネルで以下の設定を行います。
- [Diff モード] を XML に設定します。
- [Diff モード] として [フォームXML] を選択します。[フォーム XML] タブが選択されると、リテラル XML ビューの値を上書きするかどうかを問い合わせるメッセージ ボックスが表示されます。[はい] をクリックします。
- price 要素を右クリックし、ショートカット メニューから [無視する XPath を設定] を選択します。[無視する XPath を設定] ダイアログが表示されます。[OK] をクリックして、price 要素の テキスト内容 への変更を無視します。
- CipherValue 要素について、前のステップを繰り返します。
- DataReference 要素を右クリックし、[無視する XPath を設定] を選択します。[無視する XPath を設定] ダイアログが表示されます。[属性] チェックボックスをオンにして、DataReference 要素の属性への変更を無視します。[OK] をクリックします。
- [リテラル XML] ボタンを選択してリテラル XML ビューに切り替えます。
- フォーム XML ビューの値を上書きするかどうかを問い合わせるメッセージ ボックスが表示されたら、[はい] をクリックします。
- ツールバーの [保存] ボタンをクリックして変更を保存します。
- ツールバーの [テスト] ボタンをクリックしてテストを実行します。
XML Signer ツールの使用
以下の演習では、書店サービスを使用します。この書店サービスは、キーストア soatest.pfx の証明書を使ってリクエスト ボディが署名されることを要求します。
このサービスからのレスポンスも署名され、同じキー ストアを使って検証することができます。この演習では、前の演習と同じキー ストア設定を使用します。
- テスト スイート: WS-Security ノードを選択し、[テスト スイートの追加] ボタンをクリックします。
- [空] を選択して [終了] をクリックします。空のテスト スイート フォルダーが作成されます。
- 右側パネルの [名前] フィールドに Sign/Verify と入力し、ツールバーの [保存] ボタンをクリックします。
- テスト スイート: Sign/Verify ノードを選択し、[テストまたは出力の追加] ボタンをクリックします。
- 左側ペインから 標準テスト を選択し、右側ペインから SOAP Client を選択して [終了] をクリックします。テスト スイートに SOAP Client ツールが追加されます。
- 以下の操作を行って、SOAP Client ツールを設定します。
- [名前] フィールドに SOAP Client - addItemtoCart operation と入力します。
- [WSDL] タブを開き、[WSDL URI] フィールドに以下を入力します。
http://localhost:8080/parabank/services/store-wss-02?wsdl
- [リクエスト] タブをクリックします。
- [操作] ドロップダウン メニューから addItemtoCart を選択します。
- itemId パラメーターについて、その [パラメータライズ] の値として ID を選択します。
- quantity パラメーターについて、その [固定] の値として 1 を選択します。
- cartId パラメーターのチェックボックスはオフのままにします。そうすると、新しい cartId が自動的に生成されます。
- [保存] をクリックして、変更したテストを保存します。
- テスト 1: SOAP Client - addItemtoCart operation ノードを右クリックし、ショートカット メニューから [出力の追加] を選択します。[出力の追加] ウィザードが表示されます。
- 左側ペインで リクエスト > SOAP エンベロープ を選択し、右側ペインで XML Signer を選択して [終了] をクリックします。XML Signer ツールが SOAP Client に連結されます。
- 以下の操作を行って、XML Signer ツールを設定します。
- [キーストア] ドロップダウン メニューから PKCS12 Keystore を選択します。
- [アルゴリズム] ドロップダウン メニューから RSAwithSHA1 (PKCS1) - http://www.w3.org/2000/09/xmldsig#rsa-sha1 を選択します。
- WS-Security ページを開き、[フォーム] ボックスから X509IssuerSerial を選択します。
- ターゲット要素 ページを開き、[SOAP ボディ/ドキュメント全体] チェックボックスがオンであることを確認します。これで、サービスにリクエストが送られたときに XML リクエストが署名されるように設定されました。
- [保存] をクリックして、変更したテストを保存します。
ここで、SOAP Client テストの XML Response に XML Verifier ツールを追加して、XML レスポンスの署名検証を行うことができます。
- テスト 1: SOAP Client - addItemtoCart operation ノードを右クリックし、ショートカット メニューから [出力の追加] を選択します。[出力の追加] ウィザードが表示されます。
- 左側ペインから レスポンス > SOAP エンベロープ を選択し、右側ペインから XML Signature Verifier を選択して [終了] をクリックします。XML Signature Verifier ツールが テスト 1: SOAP Client - addItemtoCart operation ノードに連結されます。
- 以下の操作を行って、XML Signature Verifier ツールを設定します。
- [キー ストアの使用] チェックボックスをオンにし、ドロップダウン メニューから PKCS12 Keystore を選択します。
- [WS-Security モード] チェックボックスがオンであることを確認します。
- ツールバーの [保存] ボタンをクリックして変更を保存します。
- ツールバーの [テスト] ボタンをクリックしてテストを実行します。
- Traffic Viewer ノードをダブルクリックして、署名されたデータを参照します。テストが成功することから、署名されたリクエストをサーバーが承認し、サーバーの署名されたレスポンスが正しく検証されたことが分かります。
XML 暗号化と署名の組み合わせ
以下の演習では、書店サービスを使ってさらに複雑なテストを作成します。これは、前の 2 つの演習で実施したセキュリティ要件を組み合わせたものです。この書店サービスは、キーストア soatest.pfx を使ってリクエスト ボディが署名および暗号化されることを要求します。このサービスからのレスポンスも署名および暗号化され、同じキー ストアを使って復号化および検証することができます。
- テスト スイート: WS-Security ノードを選択し、[テスト スイートの追加] ボタンをクリックします。
- [空] を選択して [終了] をクリックします。空のテスト スイート フォルダーが作成されます。
- GUI 右側の [名前] フィールドに Encryption and Signature Combined と入力し、ツールバーの [保存] ボタンをクリックします。
- テスト スイート: Encryption and Signature Combined ノードを選択し、[テストまたは出力の追加] ボタンをクリックします。
- [テストの追加] ウィザードで、左側ペインから 標準テスト を選択し、右側ペインから SOAP Client を選択して [終了] をクリックします。テスト スイートに SOAP Client ツールが追加されます。テスト スイートに SOAP Client ツールが追加されます。
- 以下の操作を行って、SOAP Client ツールを設定します。
- [名前] フィールドに SOAP Client - getItemByTitle operation と入力します。
- [WSDL] タブを開き、[WSDL URI] フィールドに以下を入力します。
http://localhost:8080/parabank/services/store-wss-04?wsdl
- [リクエスト] タブをクリックします。
- [操作] ドロップダウン メニューから getItemByTitle を選択します。
- titleKeyword パラメーターのチェックボックスをオンにし、[固定] を選択して Linux と入力します。
- テスト 1: SOAP Client - getItemByTitle operation を右クリックし、ショートカット メニューから [出力の追加] を選択します。[出力の追加] ウィザードが表示されます。
- 左側ペインから リクエスト > SOAP エンベロープ を選択し、右側ペインから XML Signer を選択して [終了] をクリックします。XML Signer ツールが SOAP Client に連結されます。
- 以下の操作を行って、XML Signer ツールを設定します。
- [キー ストア] ドロップダウン メニューから PKCS12 Keystore を選択します。
- [アルゴリズム] ドロップダウン メニューから RSAwithSHA1 を選択します。
- WS-Security ページを開き、ドロップダウン メニューから X509BinarySecurityToken を選択します。
- ターゲット要素 ページを開き、[SOAP ボディ/ドキュメント全体] チェックボックスがオンであることを確認します。これで、サービスにリクエストが送られたときに XML リクエストが署名されるように設定されました。
ここで、XML Encryption ツールを XML Signer ツールの XML Response に追加して、署名されたドキュメントを暗号化することができます。
- リクエスト SOAP エンベロープ > XML Signer ノードを右クリックし、ショートカット メニューから [出力の追加] を選択します。[出力の追加] ウィザードが表示されます。
- XML Encryption を選択して [終了] をクリックします。XML Encryption ツールが XML Signer ツールの XML Response に連結されます。
- 以下の操作を行って、XML Encryption ツールを設定します。
- [暗号化] ラジオボタンが選択されていることを確認します。
- [キー ストア] ドロップダウン メニューから PKCS12 Keystore を選択します。
- [シンメトリック] ドロップダウン メニューから AES 256 を選択します。
- WS-Security ページを開き、[フォーム] ボックスから X509BinarySecurityToken を選択します。
- ターゲット要素 ページを開き、[SOAP ボディ/ドキュメント全体] チェックボックスがオンであることを確認します。これで、サービスにリクエストが送られたときに XML リクエストが署名されるように設定されました。
- [保存] をクリックして、変更したテストを保存します。
- ツールバーの [テスト] ボタンをクリックしてテストを実行します。
- Traffic Viewer ノードをダブルクリックしてサーバー レスポンスを確認します。
WS-SecurityPolicy がある WS-Security テストの自動生成
SOAtest では、ランタイム セキュリティ ポリシーを適用するためにテストを自動作成することができます。この機能は、正しい設定を使って正しいテストを自動生成するのに役立ち、サービスを直ちに呼び出すことができます。さらに、プロジェクト テスト レベルでポリシーを管理することで、ポジティブとネガティブの両方でサービスを適切にテストするために、さまざまなポリシーをより簡単に作成および管理することができます。
SOAtest は、WS-PolicyAttachment 規格を使用している場合、WSDL 中の WS-SecurityPolicy アサーションを認識します。WS-SecurityPolicy アサーションがある WSDL から自動的にテストを生成するには、以下の操作を行います。
- テスト スイート: WS-Security ノードを選択し、ツールバーの [プロパティの追加] ボタンをクリックします。
- [グローバル プロパティのタイプを選択] ダイアログで、WS-Policy Banks を選択して [終了] をクリックします。WS-Policy Banks ノードがテスト ケース エクスプローラーに追加されます。
- GUI 右側の WSDL Policies の設定パネルで、[WSDL URL] フィールドに
http://localhost:8080/parabank/services/store-wss-04?wsdl
と入力し、 [WSDL からリフレッシュ] ボタンをクリックします。[グローバル ポリシー] にデータが投入されます。
WSDL 中の WS-SecurityPolicy アサーションに対応する WS-SecurityPolicy 構成を含むポリシー ノードが表示されています。
同じ WSDL を使って生成されたテストに、WSDL ポリシーに一致する WS-Policy プロパティがあることが分かります。(ポリシーがそのように解釈するために) リクエストに対して XML Signer と XML Encryption ツールを自動的に構成したい場合、[WSDL に定義されたポリシーに従う] チェックボックスをオンにして [ポリシー構成の更新] をクリックします。
キーストアがすでにテスト スイートに追加されているため、このテストはすぐに実行できます。キーストアをまだ追加していない場合はキーストアの設定が必要です。キー ストアの追加に関する情報については、「Using the XML Encryption Tool」を参照してください。