章节目录:

为了帮助您确保您的安全措施在身份验证、加密和访问控制方面可靠执行,SOAtest 提供大量安全工具和选项,全面支持行业标准 WS-Security 规范。 

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

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

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

无限强度的 Java 加密扩展

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

使用 SOAP 头的消息层安全性

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

  1. 右键点击之前练习的项目,然后从快捷菜单中选择新建> 测试 (.tst) 文件
  2. 输入文件名称,点击下一步
  3. 选择并点击完成。创建一个空的测试套件文件夹。
  4. 双击新建的测试套件: 测试套件节点。
  5. 在右侧配置面板的名称字段中输入 WS-Security
  6. 点击工具栏中的保存,保存 WS-Security 测试套件。
  7. 复制 Excel:在功能测试课中添加 Books 数据源,并将其粘贴到此测试套件中。
  8. 点击测试套件: WS-Security 节点,点击工具栏中的添加测试套件
  9. 选择,然后点击完成。创建一个空的测试套件文件夹。
  10. 栓剂测试套件以打开编辑器,并输入套件用户名令牌
  11. 点击工具栏中的保存,保存用户名令牌测试套件。
  12. 点击测试套件: 用户名令牌节点,然后点击工具栏中的添加测试或输出
  13. 在添加测试向导的左窗格中点击标准测试,在右窗格中点击 SOAP 客户端,然后点击完成。将 SOAP 客户端工具添加到测试套件。
  14. 按照以下步骤完成 SOAP 客户端工具的配置:
    1. 名称字段中输入 SOAP 客户端 – getItemByTitle 操作
    2. 点击 WSDL 选项卡并在 WSDL URI 字段中输入以下内容:
      http://localhost:8080/parabank/services/store-wss-01?wsdl

    3. 点击请求选项卡,从操作下拉菜单选择 getItemByTitle
    4. 选中 titleKeyword 元素,然后选择 Keywords 作为其参数化值。
  15. 点击工具栏中的保存,保存修改的测试。
  16. 点击工具栏中的运行测试,运行该测试。请注意,测试失败是因为它没有所需的安全头。

若要添加所需的 SOAP 头:

  1. 双击测试 1: SOAP 客户端 - getItemByTitle 操作节点。
  2. 在工具配置面板中打开 SOAP Header 选项卡,然后点击添加。将打开一个添加新的 SOAP Header 对话框。
  3. 选择 WS-Security,点击 OK
  4. 双击添加到 SOAP Header 表的新条目。将打开一个对话框。
  5. 点击时间戳选项卡,禁用发送时间戳
  6. 点击用户名令牌选项卡,完成以下步骤:
    1. wsse:Username 字段中输入 soatest
    2. wsse:Password 字段中输入 soatest
  7. 然后点击 OK
  8. 点击工具栏中的保存,保存修改的测试。
  9. 点击工具栏中的运行测试,运行该测试。测试现在成功了。
  10. 双击通讯报文查看器节点,以查看请求中的 SOAP 头并验证服务是否返回了关于指定图书的信息。
  11. 若要创建一个未来在服务器响应中发生任何改变时发出提醒的回归控制,右键点击测试 1: SOAP 客户端– getItemByTitleOperation 并选择创建/更新回归控制
  12. 在响应验证向导中,选择 创建回归控制> 创建多个控制,然后点击完成

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

使用 XML 加密工具

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

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

首先您需要设置密钥库:

  1. 点击测试套件: WS-Security 节点,点击工具栏中的添加属性
  2. 在全局属性类型选择对话框中,选择全局密钥库并点击完成
  3. 按照以下步骤完成密钥库配置面板:
    1. 在 GUI 面板的名称字段中输入 PKCS12 密钥库
    2. 确保启用了为私有密钥使用相同的密钥库
    3. 点击文件系统,找到 soatest.pfx 密钥库的位置。
      • Windows:C:\Program Files\Parasoft\SOAtest\<SOATEST_VERSION>\examples\keystores.
      • 其他:<SOATEST_INSTALL_DIR>\examples\keystores.
    4. 密钥库密码字段中输入 security
    5. 密钥类型下拉菜单中选择 PKCS12
    6. 点击加载

      密钥库中可用证书别名列表被填充到证书别名下拉菜单中。
    7. 证书别名字段中选择 soatest
    8. 在密钥库配置面板顶部打开 私有密钥选项卡并点击加载
    9. 选择 soatest 作为私有密钥别名并在私有密钥密码中输入 security
  4. 点击工具栏中的保存

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

  1. 点击测试套件: WS-Security 节点,点击工具栏中的添加测试套件
  2. 选择,然后点击完成。创建一个空的测试套件文件夹。
  3. 在右侧 GUI 面板的名称字段中输入加密/解密
  4. 点击工具栏中的保存
  5. 点击测试套件: 加密/解密节点,然后点击工具栏中的添加测试或输出
  6. 在左窗格中选择标准测试,在右窗格中选择 SOAP 客户端,点击完成。将 SOAP 客户端工具添加到测试套件。
  7. 按照以下步骤完成 SOAP 客户端工具的配置:
    1. 名称字段中输入 SOAP 客户端 - getItemByID 操作
    2. 打开 WSDL 选项卡并在 WSDL URI 字段中输入以下内容:
      http://localhost:8080/parabank/services/store-wss-03?wsdl
    3. 点击请求选项卡。
    4. 操作下拉菜单中选择 getItemById
    5. 针对 id 元素,选择 ID 作为其参数化值。
  8. 点击工具栏中的保存
  9. 右键点击测试 1: SOAP 客户端- getItemByID 操作节点并选择添加输出。将打开添加输出向导。
  10. 在左侧窗格中选择请求 > SOAP Envelope,在右侧窗格中选择 XML 加密,然后点击完成。加密工具将链接到 SOAP 客户端。
  11. 按照以下步骤完成 请求 SOAP Envelope -> XML 加密工具的配置面板:
    1. 启用加密
    2. 启用 WS-Security 模式
    3. 对称 (块加密) 下拉菜单中选择 AES 256
    4. 打开 WS-Security 页面并确保 X509BinarySecurityToken表单框中已被选中。
    5. 点击目标元素并验证启用了SOAP 体/完整文档。这将加密 XML 主体元素。

      现在将 XML 请求设置为在将请求发送到服务时加密。
    6. 点击工具栏中的保存,保存修改的测试。

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

  1. 右键点击测试 1: SOAP 客户端- getItemByID 操作节点并选择添加输出。将打开添加输出向导。
  2. 在左侧窗格中选择响应 > SOAP Envelope,在右侧窗格中选择 XML 加密,然后点击完成。加密工具将链接到 SOAP 客户端。
  3. 按照以下步骤完成响应 SOAP Envelope -> XML 加密工具的配置面板:
    1. 启用加密
    2. 密钥库下拉菜单中选择 PKCS12 密钥库
  4. 点击工具栏中的保存,保存修改的测试。
  5. 点击工具栏中的运行测试,运行该测试。
  6. 双击通讯报文查看器节点,以查看加密数据。
  7. 右键点击测试 1: SOAP 客户端- getItemByID 操作节点并选择创建/更新回归控制
  8. 在打开的对话框中,选择 创建/更新回归控制,然后点击完成

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

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

  1. 双击 XML 文档 -> 比较节点并完成右侧 GUI 面板中的以下操作:
    1. 比较模式设置为 XML
  2. 选择表单 XML 作为比较模式。选中表单 XML 选项卡时,将会出现一个弹框询问用户是否使用字面量 XML 视图中的值覆盖。点击
    1. 右键点击 DataReference 元素并选择设置忽略的 XPath。将出现忽略 Xpath 设置对话框。点击 OK 忽略 price 元素的 textcontent 的修改。
    2. CipherValue 元素重复前面的步骤。
    3. 右键点击 DataReference 元素并选择 设置忽略的 XPath。将出现忽略 Xpath 设置对话框。启用属性以忽略对 DataReference 元素的属性所做的修改。然后点击 OK
    4. 点击字面量 XML,切回字面量 XML 视图。
    5. 在询问是否使用表单 XML 视图中的值覆盖的对话框中,点击
  3. 点击工具栏中的保存,保存修改的测试。
  4. 点击工具栏中的运行测试,运行该测试。

使用 XML 签名器工具

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

  1. 点击测试套件: WS-Security 节点,点击工具栏中的添加测试套件
  2. 选择,然后点击完成。创建一个空的测试套件文件夹。
  3. 在右侧 GUI 面板的名称字段中输入签名/验证,然后点击工具栏中的保存
  4. 点击测试套件: 签名/验证节点,然后点击工具栏中的添加测试或输出
  5. 在左窗格中选择标准测试,在右窗格中选择 SOAP 客户端,点击完成。将 SOAP 客户端工具添加到测试套件。
  6. 按照以下步骤完成 SOAP 客户端工具的配置:
    1. 名称字段中输入 SOAP 客户端 – addItemtoCart 操作。
    2. 点击 WSDL 选项卡并在 WSDL URI 字段中输入以下内容:
      http://localhost:8080/parabank/services/store-wss-02?wsdl
    3. 点击请求选项卡。
    4. 操作下拉菜单中选择 addItemtoCart
    5. 针对 itemId 元素,选择 ID 作为其参数化值。
    6. 针对 quantity 元素,选择 1 作为其固定值。
    7. 保持禁用 cartId 参数。这样将会自动生成一个新的 cartId。
  7. 点击工具栏中的保存,保存修改的测试。
  8. 右键点击测试 1: SOAP 客户端- addItemtoCart 操作节点并选择添加输出。将打开添加输出向导。
  9. 在左侧面板中选择请求 > SOAP Envelope,在右侧面板中选择 XML 签名器,然后点击完成。XML 签名器将链接到 SOAP 客户端。
  10. 按照以下步骤完成 XML 签名器的配置面板:
    1. 密钥库下拉菜单中选择 PKCS12 密钥库
    2. 算法下拉菜单中选择 RSAwithSHA1 (PKCS1) – http://www.w3.org/2000/09/xmldsig#rsa-sha1.
    3. 选择 WS-Security,从表单下拉菜单中选择 X509IssuerSerial
    4. 点击目标元素并验证启用了 SOAP 体/完整文档。现在将 XML 请求设置为在将请求发送到服务时签字。
    5. 点击工具栏中的保存,保存修改的测试。

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

  1. 右键点击测试 1: SOAP 客户端- addItemtoCart 操作节点并选择添加输出。将打开添加输出向导。
  2. 在左侧窗格中选择响应 > SOAP Envelope,在右侧窗格中选择 XML 签名验证器,然后点击完成。XML 验证器将链接到测试 1:SOAP 客户端 - addItemtoCart 操作节点。
  3. 按照以下步骤完成 XML 签名验证器的配置面板:
    1. 启用使用密钥库,从下拉菜单中选择 PKCS12 密钥库
    2. 确保启用了 WS-Security 模式
  4. 点击工具栏中的保存,保存修改的测试。
  5. 点击工具栏中的运行测试,运行该测试。
  6. 双击通讯报文查看器节点,以查看加密数据。由于测试成功,上面会告诉我们服务器接受了我们的签名请求,并且成功验证了服务器的签名响应。

XML 加密和签名相结合

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

  1. 点击测试套件: WS-Security 节点,点击工具栏中的添加测试套件
  2. 选择,然后点击完成。创建一个空的测试套件文件夹。
  3. 在右侧 GUI 面板的名称字段中输入加密与签名结合,然后点击工具栏中的保存
  4. 点击测试套件: 加密与签名结合节点,然后点击工具栏中的添加测试或输出
  5. 在添加测试向导的左窗格中点击标准测试,在右窗格中点击 SOAP 客户端,然后点击完成。将 SOAP 客户端工具添加到测试套件。
  6. 按照以下步骤完成 SOAP 客户端工具的配置:
    1. 名称字段中输入 SOAP 客户端 – getItemByTitle 操作
    2. 点击 WSDL 选项卡并在 WSDL URI 字段中输入以下内容:
      http://localhost:8080/parabank/services/store-wss-04?wsdl
    3. 点击请求选项卡。
    4. 操作下拉菜单中选择 getItemByTitle
    5. 启用 titleKeyword 并输入 Linux 作为其固定值。
  7. 右键点击测试 1: SOAP 客户端- getItemByTitle 操作节点并选择添加输出。将打开添加输出向导。
  8. 在左侧窗格中选择请求 > SOAP Envelope,在右侧窗格中选择 XML 签名器,然后点击完成。XML 签名器将链接到 SOAP 客户端。
  9. 按照以下步骤完成 XML 签名器的配置面板:
    1. 密钥下拉菜单中选择 PKCS12 密钥库
    2. 算法下拉菜单中选择 RSAwithSHA1
    3. 点击 WS-Security,然后从下拉菜单中选择 X509BinarySecurityToken
    4. 点击目标元素并确保启用了SOAP 体/完整文档。现在将 XML 请求设置为在将请求发送到服务时签字。

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

  1. 右键点击 请求 SOAP Envelope> XML 签名器 节点并选择添加输出。将打开添加输出向导。
  2. 选择XML 加密,然后点击完成。将 XML 加密工具链接到 XML 签名器的 XML 响应。
  3. 按照以下步骤完成 XML 加密工具配置面板:
    1. 确保启用了加密
    2. 密钥下拉菜单中选择 PKCS12 密钥库
    3. 对称下拉菜单中选择 AES 256
    4. 点击 WS-Security,然后从表单下拉菜单中选择 X509BinarySecurityToken
    5. 点击目标元素并验证启用了 SOAP Body/完整文档。现在,XML 请求已设置为在请求发送至服务时签名。
    6. 点击工具栏中的保存,保存修改的测试。
  4. 点击工具栏中的运行测试,运行该测试。
  5. 双击通讯报文查看器节点,以查看服务器响应。

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

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

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

  1. 点击测试套件: WS-Security 节点,点击工具栏中的添加属性
  2. 在全局属性类型选择对话框中,选择 WS-Policy 库并点击完成。WS-Policy 库节点将添加到测试用例浏览器中。
  3. 在 GUI 右侧 WSDL 策略配置面板的 WSDL URL 字段中输入 http://localhost:8080/parabank/services/store-wss-04?wsdl,点击 刷新 WSDL。填充了全局策略。

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

注意,使用相同 WSDL 生成的测试现在具有匹配 WSDL 策略的 WS-Policy 属性。如果您希望 SOAtest 在请求上(因为政策就是这么规定的)自动配置签名器和加密工具,您可以启用约束到 WSDL 中定义的策略并点击更新策略配置

由于密钥库已经添加到测试套件中,所以测试已经准备好运行。如果您还没有添加密钥库,则需要配置。有关添加密钥库的更多信息,请参阅Using the XML Encryption Tool

  • No labels