要按照本文进行操作,请确保已拥有:
- WebSphere Application Server 6.1,带 Web Services Feature Pack (WSFP)
- WebSphere DataPower XML Security Gateway XS40 或 WebSphere DataPower Integration Appliance XI50,带固件版本 3.7.1 或更高版本
- 用于 Web 服务安全的 JCEKS 密钥存储库形式的安全凭据,或指定加密操作所需的私钥/公开证书。
本文的内容包括:
- DataPower 中的 Policy Framework 概述
- 使用 Policy Framework 配置 WebSphere DataPower SOA Appliance,为 WebSphere Application Server 部署的 Web 服务执行 Web 服务安全处理。
- 从 WebSphere Application Server 分流的安全策略是“WSSecurity Default”策略 - 在 WebSphere DataPower 中附加安全策略的不同方法
- 使用 Policy Parameters 屏幕提供强制执行安全策略所需的运行时凭据
- 可用安全策略参数的信息
- 故障诊断
WebSphere DataPower SOA Appliance(固件版本为 3.7.1)扩展了其对 WS-Security Policy 的支持。WS-Security Policy 提供在控制模型中非常有用的策略语言。它将服务使用者和提供者同时绑定在一组安全需求中,以确保双方之间的消息交换模式满足完整性和保密性要求。WS-Security Policy 是一组元数据,用于表示安全需求的组合。WebSphere DataPower 支持带有 Web 服务代理的 WS-Security Policy。我们将介绍有关如何配置 Web 服务代理以执行 WebSphere Application Server 的安全策略的步骤。
带有 WSFP 的 WebSphere Application Server 6.1 和 WebSphere DataPower 3.6.1 或更高版本都支持 WS-Security Policy。WebSphere DataPower 固件 3.6.1 或更高版本支持 WS-Security Policy 的 3 个命名空间。
WebSphere DataPower 支持 Web 服务安全策略的两个流程模式:筛选和执行。在“筛选”模式中,设备将不修改消息,仅检查消息的语法。在“执行”模式中可以修改消息,以验证消息是否满足安全需求。下表对通信的不同模式和方向进行了对比。
由于 WebSphere DataPower SOA Appliances 在前端调用程序和后端服务之间建立了联系,所以消息的方向还影响设备为符合 WS-Security Policy 断言而采用的操作。
表 1. “筛选”与“执行”模式的比较
| WS-Security Policy 断言 | “筛选”模式 | “执行”模式 | ||
|---|---|---|---|---|
| 请求 | 响应 | 请求 | 响应 | |
|
完整性断言 sp:SignedElements | 如果未使用指定的算法对指定的元素签名,则拒绝客户端的请求 | 如果未使用指定的算法对指定的元素签名,则拒绝服务器的响应 | Filter + 如果未验证签名,则拒绝客户端的请求消息。 | Filter + 如果服务器还没有签名服务器响应消息中的元素,则对其签名。 |
|
机密性断言 sp:EncryptedElements | 如果未使用指定的算法加密指定的元素,则拒绝客户端的请求。由于 WebSphere DataPower 在筛选模式中不对传入的请求解密,因此应进行检查,以确保该元素没有以明文方式存在。* | 如果未使用指定的算法加密指定的元素,则拒绝服务器的响应。由于 WebSphere DataPower 在筛选模式中不对传入的请求解密,因此应进行检查,以确保该元素没有以明文方式存在。 | Filter +如果 WebSphere DataPower 无法解密消息或元素在解密的请求消息中不存在,则拒绝客户端的请求消息。 | Filter +如果服务器响应中的元素还没有加密,则加密该元素。 |
* 在 Web 服务代理中,如果传入的请求消息的 soap:Body 已加密,则 WebSphere DataPower 将自动对该消息解密,以接收解密的 soap:Body。soap:Body 中的信息用于确定加密的 wsdl:operation 消息。
带有 WSFP 的 WebSphere Application Server 6.1 可提供策略集的列表,以支持 Web 服务应用程序的不同完整性和保密性需求。在此练习中,WebSphere DataPower SOA 设备将用于分流“WS-Security Default 策略集”的进程密集型安全需求。这允许 WebSphere Application Server 6.1 处理资源密集型应用程序和业务逻辑。为此,WebSphere DataPower 将承载 Web 服务端点。满足对请求消息的安全需求后,设备仅将该消息转发到后端应用服务器。WebSphere DataPower 在将响应发回到调用程序之前,将根据 WS-Security Policy 对来自应用服务器的响应数据执行任何必要的转换。
图 1. 将 WS-Security Default 策略集分流到 WebSphere DataPower SOA 设备之前的数据通信
图 2. 将 WS-Security Default 策略分流到 WebSphere DataPower SOA 设备之后的数据通信
WAS“WS-Security default 策略集”包含以下安全需求列表:
- 必须使用 X509v3 令牌签名/加密请求和响应消息
- 必须使用 DirectReference 引用用于签名的证书
- 用于签名和加密的算法为:SHA1 和 AES128
- wsse:Timestamp 必须同时存在于请求/响应消息中,并且签名必须包含 wsse:Timestamp 元素
- 必须先对消息签名。签名的消息将被加密。
- 必须对以下元素进行签名:wsse:Timestamp、使用 WS-Addressing 的任何标头元素和 soap:Body
- 必须对以下元素进行加密:dsig:Signature 和 soap:Body
分流 WS-Security Default 策略集的先决条件
在将 WS-Security Default 策略和来自 WAS 的绑定分流到 WebSphere DataPower SOA 设备之前,需要以下条件:
- 在使用 WS-Security Default 策略的 WAS 客户端与 WAS 服务器之间工作的应用程序。需要禁用 WS-Addressing Policy。这可以通过复制“WSSecurity Default”然后删除 WS-Addressing 支持来完成。
图 3. 禁用 WS-Addressing
- 将 WSDL 文件用于上述应用程序的 Web 服务。我们将使用 WAS 的 EchoService
- WAS 应用服务器使用的、用于签名消息的公钥和私钥。私钥用于解密请求消息
- WAS 客户端的公钥,用于加密响应消息,并且还用于验证请求消息
为 WS-Security Default 策略集配置 WebSphere DataPower
- 使用 WebGUI 管理接口 (https://[ip]:9090) 登录到 DataPower SOA 设备
- 选择 Web 服务代理
图 4. 控制面板
- 创建新 Web 服务代理,单击“Add”按钮
图 5. 配置 Web 服务代理“Add”
- 使用“EchoService”作为代理名称。选择“Create Web Service Proxy”
图 6. 配置 Web 服务代理
- 基本信息中用于“配置 Web 服务代理”的文件
- Web 服务代理 WSDL:添加 WSDL(保留缺省值)
- WSDL 文件 URL
- 选择“Upload”上传 WDSL 文件
图 7. 上传 WSDL 文件
- 使用 WS-Policy 引用:on
- WS-Policy 参数集:选择“+”创建新 WS-Policy 参数集
- WebSphere DataPower 将分流 WAS 安全功能,供 WS-Security 使用
- 缺省情况下,需要以下参数:
- Signing Key/Signing Certificate:它们用于在响应消息上生成签名的响应
- Encryption Certificate:用于加密响应消息
- Verification Valcred:用于验证请求消息上的签名
- Remove Security Header:如果设备将管理消息的所有安全方面,则在将消息发送到 WAS 之前,必须从 SOAP Message 删除 WS-Security Header。如果此任务未完成,则 WAS 将尝试基于 WS-Security Header 验证该消息。
图 8. 策略参数
* 如果不提供用于执行给定安全策略断言的参数,则 WebSphere DataPower Framework 自动将该安全策略断言的执行转换为筛选模式。例如,为了在通信的响应一端“执行”sp:SignedParts,应指定“签名证书”和“签名密钥”。如果不提供“签名证书”和“签名密钥”,则设备将 sp:SignedParts 的执行模式转换为筛选模式。因此,如果后端服务器不能为每个 sp:SignedParts 需求提供一个签名响应,则设备将拒绝响应,不会将消息转发到调用客户端。
- WS-Policy 执行模式:执行和选择“Next”
图 9. WS-Policy 的执行模式
- 接下来为 Web 服务代理设置“Front Side Handler”和后端端点
图 10. 前端处理程序
- 选择“Front Side Handler”下的“+” -> 选择“HTTP Front Side Handler”
图 11. 选择“HTTP Front Side Handler”
- 选择端口 8855(名称:http8855,端口号: 8855)
- 选择“Apply”
图 12. 配置“HTTP Front Side Handler”
- 选择“Add”添加“Local Endpoint Handler”
图 13. 添加“Local Endpoint Handler”
- 填写远程信息:
- 协议:http
- 主机名(IP 地址):WAS 服务器的 IP 地址 (9.33.82.80) - 选择“Next”
图 14. 远程数据
- 此时,Web 服务代理应该能够启动。现在,我们必须将策略附加到此 Web 服务策略。选择“Policy”选项卡。
图 15. Policy 选项卡
- 匹配 WAS WS-Security Default 的策略是“wsp-sp-1-1-was-wssecurity-default.xml”。此策略包含 3 个策略片段:binding-policy、request_parts 和 response_parts。我们将充分利用 request_parts 和 response_parts 相同这一事实。WS-Security Policy 规范指定了可以在哪一个策略主体中使用哪一个绑定。如果您不希望按以下步骤操作,请确保将策略断言附加到正确的策略主体中。选择“yes”进入“Show portType and binding nodes:”。
图 16. 显示端口类型和绑定节点
- 将 wsp-sp-1-1-was-wssecurity-default.xml#binding-policy 附加到端点策略主体。在这种情况下,我们将其附加到 wsdl:portType 元素
图 17. 附加策略源 #binding-policy
- 将 wsp-sp-1-1-was-wssecurity-default.xml#request_parts 附加到操作策略主体,这样 wsdl:input 和 wsdl:output 将使用同一策略。在这种情况下,我们将其附加到 wsdl:operation
图 18. 附加策略源 #request_parts
- 此时,我们将关闭响应消息的模式验证。根据 WS-Security Default 策略,必须加密响应消息,因此它会使 Web 服务代理执行的模式验证无效。可以使用两种方法处理此问题,一种方法是使用异常映射,另一种方法是禁用响应的模式验证。我们将使用第二种方法。可以通过在 WebGUI 中单击复选框做到这一点。取消选中“Schema validate response messages”。
图 19. 禁用模式验证响应消息
- 单击“Done”
- 创建 ID 凭据来关联 WAS 的 was-server 公钥和私钥。
- 从控制面板选择 Keys & Certs Management
- 身份验证凭据 – 用于标识自身
- 选择“Add”
- 名称:was-server
- 加密密钥:was-server
- 证书:was-server
- 选择“Apply”
图 20. 加密身份验证凭据
在确定哪些操作可以路由传入的通信之前,Web 服务代理必须解密 soap:Body 的 soap 消息。有两种方法提供 Web 服务代理可用来自动解密的密钥信息。创建标识凭据是首选方法。
- 定义将公共证书与其对应的私钥关联的标识凭据
- 在 Web 服务代理的“Proxy Settings”中指定“Decrypt Key”
图 21. 解密密钥
在 WAS Web 服务提供程序上禁用 WS-Security Default 策略
请确保停止服务提供程序,然后再启动它。这样可确保服务提供程序不再运行任何 WS-Security Default 策略或绑定。
图 22. 服务提供程序
再次说明,请确保停止服务提供程序,然后再启动它。这样可确保服务提供程序不再运行任何 WS-Security Default 策略或绑定。
图 23. 服务提供程序
修改测试程序,将 WebSphere DataPower 用作服务 URI
- 将“Service URI:” 修改为 DataPower 承载的 Web 服务端点。
- 单击“Send Message”
- 请求消息 echo 响应将显示
图 24. 常规消息响应
表 2. 用于 Web 服务代理的 WS-Security Policy 的运行时参数列表
| 参数名称 | 描述 | WS-Security Policy 断言 |
|---|---|---|
| Kerberos Client Principal | [response] 用于签名消息 | sp:KerberosToken |
| Kerberos Server Principal | [request] 用于验证消息上的签名 | sp:KerberosToken |
| Kerberos Keytab | [request/response] Kerberos 的 Keytab 文件 | sp:KerberosToken |
| Verification Valcred | [request] 用于验证使用非对称算法进行的签名 | sp:SignedParts sp:SignedElements sp:SignedSupportingTokens sp:SignedEncryptedSupportingToken sp:OnlySignEntireHeadersAndBody |
| Signing Certificate | [response] 为签名密钥生成 KeyInfo,即对应的签名密钥 | sp:SignedParts sp:SignedElements sp:SignedSupportingTokens sp:SignedEncryptedSupportingToken sp:OnlySignEntireHeadersAndBody |
| Signing Key | [response] 用于签名响应消息 | sp:SignedParts sp:SignedElements sp:SignedSupportingTokens sp:SignedEncryptedSupportingToken sp:OnlySignEntireHeadersAndBody |
| Encryption Certificate | [response] 用于加密响应消息 | sp:EncryptedParts sp:EncryptedElements sp:ContentEncryptedElements sp:EncryptedSupportingToken sp:SignedEncryptedSupportingToken |
| Decryption Key | [request] 用于解密传入的请求消息。假设在加密 soap:Body 时 Web 服务代理将自动解密消息。此参数的使用仅限于使用不同密钥加密的其他加密元素 | sp:EncryptedParts sp:EncryptedElements sp:ContentEncryptedElements sp:EncryptedSupportingToken sp:SignedEncryptedSupportingToken |
| AAA Policy | [response] 用于生成响应消息所需的令牌 | sp:UsernameToken sp:SamlToken sp:SecurityContextToken sp:SecureConversationToken sp:SignedSupportingTokens sp:EncryptedSupportingTokens sp:SignedEncryptedSupportingToken |
| Remove Security Header | [request] 设备将消息发送到后端服务器之前,此参数将从请求消息中删除 WS-Security Header 的 wsse:Security。 | - |
| Timestamp Expiration Override Period | [response] 在签名过程中,此参数可重写缺省的时间戳过期时间,缺省值为 300 秒 | sp:SymmetricBinding sp:AsymmetricBinding sp:TransportBinding |
| Interoperable with | [request/response] 此参数为可互操作事项切换供应商指定的代码 | - |
| WebSphere DataPower Specific Features | [request] 在签名验证过程中,不验证时间戳 [response] 使用动态签名证书 – 此参数使用请求消息的签名证书加密响应消息 | - |
- 为 Web 服务代理打开探测器
下图显示了探测器捕获的事务 (#68802),其中输入和输出消息都包含 UsernameToken11。
请求中存在两个调用。每个调用都代表了策略中的一个备选方案。第一个调用检查 UsernameToken10。如果消息包含 Uernametoken11,则该消息会使策略失败。在消息使第一个备选方案(调用)无效后,策略框架会自动触发第二个备选方案(调用)。第二个备选方案检查 UsernameToken11。因此它将成功。
响应中存在三个调用。第一个调用检查 soap 错误。如果消息不是 SOAP 错误,则使此检查失败。(请注意,对于响应,第一个调用总是检查 SOAP 错误,因此,如果从后端返回 SOAP 错误,则没有任何策略适用于 SOAP 错误,SOAP 错误可能原封返回到调用程序。)由于检查 UsernameToken10,所以该消息也会使第二个调用失败。不过,该消息会通过第三个调用,因为它检查了 UsernameToken11。
图 25. 事务清单
- 使用命令行
使用 show policy-config 命令可以检索为与 Web 服务代理关联的策略创建的多个规则和操作。对于特定的执行,请使用以下格式调用此命令:show policy-config 执行次数
如果没有执行次数,该命令将返回所有为满足策略需求而创建的运行时规则和操作的详细信息。
您还可以使用 show policy-attachment 和 show policy-parameter 命令分别检索 Policy Attachments 和 Policy Parameter 对象的配置详细信息。
要确定执行次数,请使用 WebGUI。从 WebGUI 选择 STATUS -> Web Services -> Web Services WSDLs。在这种情况下,我们选择 85。
图 26. 显示策略(查看大图)
下面列出了 show policy-config 85 的输出。为与 WSP 关联的策略创建了多个规则和操作。
- 规则 operation_85_1-2-process-resp 适用于通信的响应端
- 规则 operation_85_1-2-req 适用于请求端
- 操作 operation_85_1-1-1-request-rule-UsernameToken 是一个筛选器,负责检查请求端的 UsernameToken
- 操作 operation_85_1-1-1-response-rule-filter 是一个负责检查响应端的筛选器
从名称的突出显示部分,您可以知道名称中包含命名约定,传达了有关生成的规则或操作的方向信息。
清单 1. 显示策略配置输出
xi50[ws-security-policy](config)# show policy-config 85
Rule Name Details
--------- -------
operation_85_1-2-process-resp [up] --- type: response ---
filter INPUT store:///required-elements-filter.xsl NULL
results INPUT
Rule Name Details
--------- -------
operation_85_1-2-req [up] --- type: request ---
filter INPUT store:///required-elements-filter.xsl NULL
results INPUT
............... More generated rule ............
action: operation_85_1-1-1-request-rule-UsernameToken [up]
-----------------------------------------------------
admin-state enabled
type filter
input INPUT
transform store:///required-elements-filter.xsl
output NULL
named-inouts default
parameter RequiredElementXPaths "/*[local-name()='Envelope' and
(namespace-uri()='http://schemas.xmlsoap.org/soap/envelope/' or
namespace-uri()='http://www.w3.
transactional off
soap-validation body
sql-source-type static
asynchronous off
results-mode first-available
retry-count 0
retry-interval 1000 msec
multiple-outputs off
iterator-type XPATH
timeout 0 msec
action: operation_85_1-1-1-response-rule-filter [up]
-----------------------------------------------
admin-state enabled
type filter
input INPUT
transform store:///required-elements-filter.xsl
output NULL
named-inouts default
parameter RequiredElementXPaths "/*[local-name()='Envelope' and
(namespace-uri()='http://schemas.xmlsoap.org/soap/envelope/' or
namespace-uri()='http://www.w3.
transactional off
soap-validation body
sql-source-type static
asynchronous off
results-mode first-available
retry-count 0
retry-interval 1000 msec
multiple-outputs off
iterator-type XPATH
timeout 0 msec
............... More generated action ............
|
下面列出了 show policy-attachment 命令的输出。策略附件列出了给定的 Web 服务代理服务的外部附加策略。在下面的示例中,policy,
wsp-sp-1-1-sign-parts.xml 被附加到 {urn:GoogleSearch}GoogleSearchService。这意味着与 {urn:GoogleSearch}GoogleSearchService 关联的所有消息必须符合此策略,并且操作必须使用执行模式。
清单 2. 显示策略附件输出
policy-attachments: test_GoogleSearch.wsdl [up]
------------------------------------------
admin-state enabled
enforcement-mode enforce
policy-references on
external-policy service {urn:GoogleSearch}GoogleSearchService
store:///policies/templates/wsp-sp-1-1-sign-parts.xml
policy-attachments: SecPolicyAttachment-enforce [up]
-----------------------------------------------
admin-state enabled
enforcement-mode enforce
policy-references on
ignore-attachment-point service {tns1}service
policy-attachments: SecPolicyAttachment-filter [up]
----------------------------------------------
admin-state enabled
enforcement-mode filter
policy-references on
ignore-attachment-point service {tns1}service
|
下面列出了 show policy-parameter 命令的输出。对于执行,需要策略参数。
清单 3. 显示策略参数输出
policy-parameters: SecPolicyParameterAliceCertificate [up]
-----------------------------------------------------
admin-state enabled
parameter {http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200512}
ws-secpol-Certificate name:secpol-cert-alice
parameter {http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}
ws-secpol-Certificate name:secpol-cert-alice
policy-parameters: SecPolicyParameterAliceDecryptKey [up]
----------------------------------------------------
admin-state enabled
parameter {http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200512}
ws-secpol-DecryptKey secpol-key-alice
parameter {http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}
ws-secpol-DecryptKey secpol-key-alice
|
- 参与论坛讨论。
- 本系列第 1 部分:在本文中,您将使用 Rational Application Developer 导入示例 EchoService 客户机 EAR 文件,并使用 WS-Security 启用它;在 WebSphere Application Server 上安装示例 Web 服务客户机;安装并使用 WS-Security 配置了 EchoService;并使用浏览器输入了从 Web 服务 EchoService 客户机应用程序发送到 Web 服务 EchoService 服务的消息。。
- 本系列第 2 部分:本文将以第 1 部分的场景为基础,部署 WebSphere DataPower SOA Appliance 来处理应用服务器的 WS-Security 部分的工作。将在 WebSphere DataPower SOA Appliance 上创建 Web 服务代理来接收发送到 EchoService 服务的 Web 服务请求。。
- 了解关于“Feature Pack for Web Services for WebSphere Application Server V6.1”的更多信息。
- 获取关于 WebSphere DataPower SOA Appliances 的更多消息。这些专门构建、易于部署的网络设备可简化并帮助保护和加速您的 XML 和 Web 服务部署,同时扩展您的 SOA 基础结构。
- 关于“WebSphere DataPower SOA Appliances 固件和文档”。
- 获取关于 WS-Security Policy 的 3 个命名空间的 WebSphere DataPower SOA 设备支持的其他信息:WS-Security Policy 1.2、WS-Security Policy 语言 和 WS-Security Policy 规范。
- 使用 IBM SOA 沙箱进行试验!通过 IBM SOA 进行实际的亲手实践来提高您的 SOA 技能。
- 请访问 IBM developerWorks 上的 SOA and Web services 专区,以获得数百篇关于如何开发 Web 服务应用程序的文章以及入门级、中级和高级教程,您将大开眼界。