在本章节中:

为了帮助您确保您的安全性措施在身份验证、加密和访问控制方面完美无缺,SOAtest 包含了大量完全支持行业标准 WS-Security 的安全性工具和选项。 

在 WS-Security 测试套件给定的示例中,将显示加密/解密示例、数字签名和添加 SOAP 头文件的示例。以下选项是 SOAtest 支持的关键安全工具和选项:

  • XML Encryption Tool: XML 加密工具允许您使用 Triple DES, AES 128, AES 192, 或 AES 256 对整个信息或信息的一部分进行加密和解密。在 WS-Security 模式中,支持二进制安全令牌、X509IssuerSerial 和密钥标识符。
  • XML Signer Tool: XML 签名工具允许您根据特定需求,对整个消息或消息的一部分进行数字签名。在某种情况下,加密文档的其他部分时对文档的某些部分进行数字签名可能很重要。
  • XML Signature Verifier Tool:XML 验证器工具允许使用功能存储在密匙库文件中的公私钥匙对对数字签名文件进行验证。
  • Key Stores:SOAtest 中密匙库的使用允许您使用存储在密匙库文件中的公私钥匙对对数字签名进行加密/解密。可以 JKS、PKCS12、BKS、PEM 和 UBER 的格式使用密匙库。
  • Username Tokens, SAML Tokens, X509 Tokens, or Custom HeadersSOAtest 支持发送自定义 SOAP 头文件,并包含用户名令牌和 SAML 令牌的模板。

当您完成本教程这个部分时,您的测试套件应类似 SOAtestTutorial.tst 文件中的 "WS-Security”测试套件。

无限强度的 Java 加密扩展

若要执行使用 XML 签名验证器、XML 签名器或 XML 加密工具或如果使用密匙库执行安全测试,您将需要下载并安装无限强度的 Java 加密扩展。有关更多详情,请查阅 JCE 前提条件

使用 SOAP 头文件的消息层安全性

在本示例中,我们将使用书店网络服务,要求根据 WS-Security 规格在 SOAP 头文件中提交用户名和密码。SOAtest 提供添加自定义头文件的功能,还为创建用户名令牌和 SAML 令牌提供了预先定义模板。以下示例使用用户名令牌。

  1. 右键单击以前练习的项目,然后从快捷菜单中选择 Add New> Test (.tst) File
  2. 输入文件名称,然后单击 Next
  3. 选择 Empty 并点击 Finish。创建一个空的测试套件文件夹。
  4. 双击新建的添加的 Test Suite: Test Suite 节点。
  5. WS-Security 在右侧配置面板的 Name 字段中键入。
  6. 单击 Save 按钮以保存 WS-Security 测试套件。
  7. 复制 Excel:在功能测试课中添加Books 数据源,并将其粘贴到此测试套件中。
  8. 选择 Test Suite: WS-Security 节点并单击 Add Test Suite 按钮。



  9. 选择 Empty 并点击 Finish。创建一个空的测试套件文件夹。
  10. 栓剂测试套件以打开编辑器,并输入套件 用户名令牌
  11. 单击 Save  按钮以保存用户名令牌测试套件。
  12. 选择 Test Suite: Username Tokens 节点并单击 Add Test or Output 按钮。



  13.  Add Test 向导中,从左窗格选择 Standard Test ,右窗格选择 SOAP Client 然后单击 Finish。将 SOAP 客户端工具添加到测试套件。
  14. 双击 Test 1: SOAP Client 节点在 Test Suite: Username Tokens 节点。
  15. 按照以下步骤完成 SOAP 客户端工具的配置:
    1. 在下面字段中输入 SOAP 客户端– getItemByTitle 操作Name
    2. 打开 WSDL 选项卡并在 WSDL URI 字段中输入以下内容:
      http://localhost:8080/parabank/services/store-wss-01?wsdl



    3. 打开 请求 选项卡选择 getItemByTitle ,该选项来自 Operation 下拉菜单。
    4. 选中 titleKeyword 元素,然后选择 Keywords  作为其 Parameterized 值。



  16. 单击 Save 工具栏按钮以保存更改的测试。
  17. 单击 Test 工具栏按钮运行测试。请注意,测试失败是因为它没有所需的安全头文件。

若要添加所需的 SOAP 头文件:

  1. 双击 Test 1: SOAP Client - getItemByTitle operation 节点。
  2. 在工具配置面板中打开 SOAP Header  选项卡,然后单击 Add 按钮。将打开一个新建的 SOAP 头文件对话框。
  3. 选择 WS-Security 然后单击 OK



  4. 双击添加到 SOP 头文件表的新条目。将打开一个对话框。
  5. Timestamp 选项卡中,清除 Send Timestamp 多选框。
  6. 打开 Username Token 选项卡,完成以下步骤:
    1. 在以下字段中输入 soatestwsse:Username
    2. 在以下字段中输入 soatestwsse:Password



  7. 然后单击 OK
  8. 单击 Save  工具栏按钮以保存更改的测试。
  9. 单击 Test 工具栏按钮运行测试。测试现在成功了。
  10. 双击 Traffic Viewer 节点,以查看请求中的 SOAP 头文件并验证服务是否返回了关于指定图书的信息。
  11. 若要创建一个未来在服务器响应中发生任何改变时发出提醒的回归控制,右键单击 Test 1: SOAP Client – getItemByTitleOperation 并从快捷菜单中选择 Create/Update Regression Control 。
  12. 在响应验证向导中,选择 Create Regression Control> Create Multiple Controls,然后单击 Finish

如果多次运行测试,您将注意到测试失败,因为 price 元素变更了。按照前面练习中的步骤忽略动态更改 price 值。

使用 XML 加密工具

在本示例中,我们将使用类似与前面示例使用的服务的图书库服务,除了:

  • 请求体必须使用密匙库 soatest.pfx 加密,此库存在于 examples\keystores 目录中。
  • 还要加密响应,并使用相同的密匙库对其进行解密。

首先您需要设置密匙库:

  1. 选择 Test Suite: WS-Security 节点并单击 Add Property 工具栏按钮。



  2. 在全局属性类型选择对话框中,选择 Global Key Store 并单击 Finish



  3. 按照以下步骤完成密匙库配置面板:
    1. 在 GUI 面板的一下字段中输入 PKCS12 KeystoreName
    2. 确保选中 Use same key store for private key 多选框。
    3. 单击 Filesystem 按钮并导航到密匙库 soatest.pfx的位置。
      • 针对 Windows:C:\Program Files\Parasoft\SOAtest\[SOAtest version number]\examples\keystores.
      • 针对其他:[SOAtest installation directory]\examples\keystores.
    4. Key Store Password 字段中输入 security
    5. 选择 Key Store Type 下拉菜单中 PKCS12 。
    6. 单击 Load 按钮。



      密匙库中可用证书别名列表被填充到 Certificate Alias 下拉菜单。
    7. 在以下字段中选择 soatestCertificate Alias 。
    8. 在密匙库配置面板顶部打开 Private Key 选项卡并单击 Load
    9. 选择 soatest 用于 Private Key Alias 并为以下选项输入 securityPrivate Key Password
  4. 单击 Save  工具栏按钮。

现在我们准备使用 XML 加密工具设置测试。为了更好的组织我们的安全测试,我们将为加密测试创建一个新的文件夹。

  1. 选择 Test Suite: WS-Security 节点并单击 Add Test Suite 按钮。



  2. 选择 Empty  并点击 Finish。创建一个空的测试套件文件夹。
  3. 加密/解密 键入到右侧 GUI 面板中 Name 字段。
  4. 单击 Save工具栏按钮。
  5. 选择 Test Suite: Encryption/Decryption 节点并单击 Add Test or Output 按钮。



  6. 从左窗格选择 Standard Test ,右窗格选择 SOAP Client 然后单击 Finish。将 SOAP 客户端工具添加到测试套件。
  7. 按照以下步骤完成 SOAP 客户端工具的配置:
    1. 在下面字段中输入 SOAP 客户端– getItemByID 操作Name
    2. 打开 WSDL 选项卡并在 WSDL URI 字段中输入以下内容:
      http://localhost:8080/parabank/services/store-wss-03?wsdl
    3. 打开 Request  选项卡。
    4. 从以下选项中选择 getItemByIdOperation 下拉菜单。
    5. 针对 id 元素,选择 ID 作为其 Parameterized 值。



  8. 单击 Save 工具栏按钮。
  9. 右键单击 Test 1: SOAP Client - getItemByID 操作节点并从快捷菜单中选择 Add Output 。将显示 Add Output 向导。
  10. 从左窗格选择 Request>SOAP Envelope ,右窗格选择 XML Encryption,然后单击 Finish 。加密工具将链接到 SOAP 客户端。
  11. 按照以下步骤完成请求 SOAP Envelope -> XML 加密工具的配置面板:
    1. 确保选中 Encrypt 单选框。
    2. 确保选中 WS-Security Mode 框。
    3. 选择 Symmetric (Block Encryption) 下拉菜单中的 AES 256
    4. 打开 WS-Security 页面并确保 X509BinarySecurityTokenForm 框中已被选中。
    5. 打开 Target Elements 页面并验证选中了 SOAP Body/entire document 多选框。这将加密 XML 主体元素。



      现在将 XML 请求设置为在将请求发送到服务时加密。
    6. 单击 Save 工具栏按钮以保存更改的测试。

现在您可以将 XML 加密工具添加到 SOAP 客户端测试的 XML 响应中,以启用 XML 响应的解密工具。 

  1. 右键单击 Test 1: SOAP Client - getItemByID  操作节点并从快捷菜单中选择 Add Output。将显示 Add Output 向导。
  2. 从左窗格选择 Response> SOAP Envelope ,右窗格选择 XML Encryption ,然后单击 完成 按钮。加密工具将链接到 SOAP 客户端。
  3. 按照以下步骤完成响应 SOAP Envelope -> XML 加密工具的配置面板:
    1. 选择 Decrypt 单选框。
    2. 选择 Key Store 下拉菜单中的 PKCS12 Keystore



  4. 单击 Save 工具栏按钮以保存更改的测试。
  5. 单击 Test 工具栏按钮运行测试。
  6. 双击 Traffic Viewer 节点,以查看加密数据。
  7. 右键单击 Test 1: SOAP Client - getItemByID operation 节点并选择 Create/Update Regression Control
  8. 在打开的对话框中,选择 Create Regression Control> Create Multiple Controls,然后单击 Finish



    回归控制被创建并自动链接到 Response SOAP Envelope -> XML Encryption。请注意,解密的响应显示在回归控制中。

最后,如果希望忽略来自 XML 响应的动态值,以便回归控制不会每次都失败。 

  1. 双击 XML Document -> Diff 节点并完成右侧 GUI 面板中的以下操作:
    1. Diff Mode 设置为 XML
  2. 选择 Form XML  作为 Diff Mode。选中表单 XML 选项卡时,将会出现一个弹框询问用户‘是否使用文字 XML 视图中的值覆盖?’。单击 Yes
    1. 右键单击 price 元素并从快捷菜单中选择 Setup Ignored XPath 。将出现 Ignore XPath Setting 对话框。单击 OK 忽略 price 元素的 textcontent  的修改:。
    2. CipherValue 元素重复前面的步骤。
    3. 右键单击 DataReference 元素并选择 Setup Ignored XPath。将出现一个 Ignore XPath Setting 对话框。选择 Attribute 多选框,以忽略 DataReference 元素的属性。然后单击 OK
    4. 选择 Literal XML 按钮切换到文字 XML 视图。
    5. 在询问‘是否使用表单 XML 视图中的值覆盖?’的对话框中,单击 Yes
  3. 单击 Save 工具栏按钮以保存更改的测试。
  4. 单击 Test 工具栏按钮运行测试。

使用 XML 签名器工具

在接下来的示例中,我们将使用图书库服务,该服务要求请求体使用密匙库 soatest.pfx中的证书签名。还要加密该服务的响应,并可使用相同的密匙库对其进行验证。我们将使用以前示例的密匙库设置。

  1. 选择 Test Suite: WS-Security 节点并单击 Add Test Suite 按钮。



  2. 选择 Empty  并点击 Finish。创建一个空的测试套件文件夹。
  3. Sign/Verify 键入到右侧 GUI 面板中的 Name 字段,然后单击 Save 工具栏按钮。
  4. 选择 Test Suite: Sign/Verify 节点并单击 Add Test or Output 按钮。



  5. 从左窗格选择 Standard Test ,右窗格选择 SOAP Client,然后单击 Finish。将 SOAP 客户端工具添加到测试套件。
  6. 按照以下步骤完成 SOAP 客户端工具的配置:
    1. 在下面字段中输入 SOAP 客户端– addItemtoCart 操作: Name
    2. 打开 WSDL 选项卡并在 WSDL URI 字段中输入以下内容:
      http://localhost:8080/parabank/services/store-wss-02?wsdl
    3. 打开 Request 选项卡。
    4. 从以下选项中选择 addItemtoCartOperation 下拉菜单。
    5. 针对 itemId 元素,选择 ID 作为其 Parameterized  值。
    6. 针对 quantity 元素,选择 1 作为其 Fixed 值。
    7. 不选择 cartId 参数。这样将会自动生成一个新的 cartId。



  7. 单击 Save to 保存更改的测试。
  8. 右键单击Test 1: SOAP Client - addItemtoCart 操作节点并从快捷菜单中选择Add Output 。将显示 Add Output 向导。
  9. 从左窗格选择 Request>SOAP Envelope ,右窗格选择 XMLSigner ,然后单击 Finish。XML 签名器将链接到 SOAP 客户端。
  10. 按照以下步骤完成 XML 签名器的配置面板:
    1. 从以下选项选择 PKCS12 KeystoreKey Store 下拉菜单:
    2. 从以下选项选择 RSAwithSHA1 (PKCS1) – http://www.w3.org/2000/09/xmldsig#rsa-sha1Algorithm 下拉菜单。
    3. 打开 WS-Security 页面并从以下框选择 X509IssuerSerialForm 框。



    4. 打开 Target Elements 页面并验证选中了 SOAP 主体/整个文件 多选框。现在将 XML 请求设置为在将请求发送到服务时签字。
    5. 单击 保存 以保存更改的测试。

现在您可以将 XML 验证器添加到 SOAP 客户端测试的 XML 响应中,以启用 XML 响应的签名验证工具:

  1. 右键单击 Test 1: SOAP Client - addItemtoCart  操作节点并从快捷菜单中选择 Add Output  。将显示 Add Output 向导。
  2. 从左窗格选择 Response> SOAP Envelope ,右窗格选择 XML Signature Verifier ,然后单击 Finish。XML 验证器将链接到 Test 1: SOAP Client - addItemtoCart 操作节点。
  3. 按照以下步骤完成 XML 签名验证器的配置面板:
    1. 选择 Use Key Store 多选框并从下拉菜单中选择 PKCS12 Keystore
    2. 确保选中 WS-Security Mode 多选框。



  4. 单击 Save 工具栏按钮以保存更改的测试。
  5. 单击 Test 工具栏按钮运行测试。
  6. 双击 Traffic Viewer 节点,以查看加密数据。由于测试成功,上面会告诉我们服务器接受了我们的签名请求,并且成功验证了服务器的签名响应。

XML 加密和签名相结合

在本示例中,我们将使用一个‘书店服务’创建一个更复杂的测试,该服务结合了前两个练习的安全性需求。该服务要求请求体使用密匙库 soatest.pfx进行了签名和加密。还要求签名和加密该服务的响应,并可使用相同的密匙库对其进行解密和验证。

  1. 选择 Test Suite: WS-Security 节点并单击 Add Test Suite 按钮。



  2. 选择 Empty 并点击 Finish。创建一个空的测试套件文件夹。
  3. 加密和签名相结合 键入到右侧 GUI 面板中的 Name 字段,然后单击 Save 工具栏按钮。
  4. 选择 Test Suite: Encryption and Signature Combined 节点并单击 Add Test or Output 按钮。



  5. 在‘添加测试’向导中,从左窗格选择 Standard Test ,右窗格选择 SOAP Client  然后单击 Finish。将 SOAP 客户端工具添加到测试套件。
  6. 按照以下步骤完成 SOAP 客户端工具的配置:
    1. 在下面字段中输入 SOAP 客户端– getItemByTitle 操作: Name
    2. 打开 WSDL 选项卡并在 WSDL URI 字段中输入以下内容:
      http://localhost:8080/parabank/services/store-wss-04?wsdl
    3. 打开 Request 选项卡。
    4. 从以下选项中选择 addItemByTitleOperation 下拉菜单。
    5. 针对 titleKeyword 元素,输入 Linux 作为其 Fixed 值。



  7. 右键单击 Test 1: SOAP Client - getItemByTitle 操作节点并从快捷菜单中选择 Add Output 。将显示 Add Output 向导。
  8. 从左窗格选择 Request>SOAP Envelope ,右窗格选择 XML Signer,然后单击 Finish  。XML 签名器将链接到 SOAP 客户端。
  9. 按照以下步骤完成 XML 签名器的配置面板:
    1. 从以下选项选择 PKCS12 KeystoreKeyStore 下拉菜单。
    2. 从以下选项中选择 RSAwithSHA1Algorithm 下拉菜单。
    3. 打开 WS-Security 页面并从下拉菜单选择 X509BinarySecurityToken
    4. 打开 Target Elements 页面并验证选中了 SOAP Body/entire document 多选框。现在将 XML 请求设置为在将请求发送到服务时签字。

现在您可以将 XML 加密工具添加到 SOAP 签名器的 XML 响应中,以加密签名文件。 

  1. 右键单击 Request SOAP Envelope> XML Signer 节点并从快捷菜单选择 Add Output 。将显示 Add Output 向导。
  2. 选择 XML Encryption 并单击 Finish 按钮。将 XML 加密工具链接到 XML 签名器的 XML 响应。
  3. 按照以下步骤完成 XML 加密工具配置面板:
    1. 确保选中 Encrypt 单选框。
    2. 从以下选项选择 PKCS12 KeystoreKeyStore 下拉菜单。
    3. 从以下选项选择 AES256Symmetric 下拉菜单。
    4. 打开 WS-Security 页面并从以下框选择 X509BinarySecurityTokenForm 框。
    5. 打开 Target Elements 页面并验证选中了 SOAP Body/entire document 多选框。现在将 XML 请求设置为在将请求发送到服务时签字。
    6. 单击 Save 以保存更改的测试。
  4. 单击 Test 工具栏按钮运行测试。
  5. 双击 Traffic Viewer 节点,以查看服务器响应。

使用 WS-SecurityPolicy 自动生成 WS-Security 测试

Parasoft 支持自动创建测试来执行运行时安全策略。这将帮助您使用正确的设置自动生成正确的测试,以便可以立即调用服务。而且,通过在项目测试级别管理策略,您可能更容易创建和管理各种策略变体,以便正确地测试服务,包括正面的和负面的。

当使用 WS-PolicyAttachment 标准时,SOAtest 能识别到 WSDL 中的 WS-SecurityPolicy 断言。若要使用 WS-SecurityPolicy 断言自动生成来自 WSDL 的测试,完成以下步骤:

  1. 选择 Test Suite: WS-Security 节点并单击 Add Property 工具栏按钮。



  2. Global Property Type Selection 对话框中,选择 WS-Policy Bank 并单击 Finish。将 WS-Policy Banks 节点添加到测试用例资源管理器中。
  3. 在 GUI 右侧的 WSDL 策略配置面板中,将 http://localhost:8080/parabank/services/store-wss-04?wsdl 输入到 WSDL URL 字段并单击 Refresh from WSDL 按钮。填充了全局策略。

注意,有些策略节点包含与 WSDL 中的 WS-SecurityPolicy 断言相对应的 WS-SecurityPolicy 配置。 

注意,使用相同 WSDL 生成的测试现在具有匹配 WSDL 策略的 WS-Policy 属性。如果您希望 SOAtest 在请求上(因为政策就是这么规定的)自动配置签名器和加密工具,您可以启用 Constrain to policies defined in WSDL 并单击 Update policy configurations



由于密匙库已经添加到测试套件中,所以测试已经准备好运行。如果您没有添加密匙库,这是需要配置的。有关添加密匙库的更多详情,请查阅 Using the XML Encryption Tool

  • No labels