技术开发 频道

通过 IBM WESB 和 IBM WebSphere DataPower SOA Appliances 使 SOA

    配置样式表以便在运行时选择证书

    现在可以执行此场景中的最后一步了。每个 SOAP 消息都发往 SOAP 消息正文中包含的 serviceProviderId 字段标识的特定服务提供者。您已经将类型 serviceProviderId_cert 的命名约定标识的多个证书上传到了 WebSphere DataPower SOA Appliances,其中 serviceProviderId 可以是 ASL1 至 ASL8(8 是本例中服务提供者的数量)。对于每个传入的 SOAP 消息,WebSphere DataPower SOA Appliances 必须知道用来执行加密的证书。因此,现在您需要实现一个机制来解析 SOAP 消息的请求、获取 serviceProviderId 并用它来找到正确的证书。

    正如上一部分中所阐述,在加密页中启用 Use Dynamically Configured Recipient Certificate 选项会自动触发 WebSphere DataPower SOA Appliances 执行加密,并利用在运行时提供的证书:如果已经为上下文变量 var://context/transaction/dynamicCertName 指定了一个值,并且它引用了一个有效的证书,则在加密步骤中将使用此证书。否则,将使用接收方证书中指定的缺省值(如果已经提供)。图 15 对此进行了说明。


图 15. 加密规则
 

    要完成 WebSphere DataPower SOA Appliances 的配置,请执行下列步骤:

    1.如清单 4 所示创建样式表。

    清单 6. WebSphere DataPower SOA Appliances 命名空间和扩展元素前缀
                       
<xslt:stylesheet version="1.0"
extension-element-prefixes="dp"xmlns:tns="http://www.w3.org/1999/xhtml"
xmlns:dp="http://www.datapower.com/extensions"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<dp:set-variable name="'var://context/transaction/dynamicCertName'"
value="concat('cert:', concat(/*[local-name()='Envelope']/*
[local-name()='Body']/*[local-name()='sendUpdatedAgenda']/*
[local-name()='serviceProviderId'],_cert))" />
</xsl:template >
</xsl:stylesheet>

    此样式表为各项功能和 dp 扩展元素前缀声明特定于 WebSphere DataPower SOA Appliances 的命名空间 (dp:)。在每次需要使用特定于 WebSphere DataPower SOA Appliances 的扩展功能时必须始终定义这些元素。在样式表中使用扩展功能时,它代表一个强大的方法,可以丰富、加密、集成和促进通过简单的 Web UI 提供的 WebSphere DataPower SOA Appliances 功能。在此场景中,您根据 SOAP 消息正文中包含的 serviceProviderId 字段中的值调用了 dp:set-variable 扩展功能来设置上下文变量 var://context/transaction/dynamicCertName。concat 功能是基本的 XSL 功能,它只需将 serviceProviderId 检索的值连接到 _cert 字符串就可以正确标识 WebSphere DataPower SOA Appliances 上的证书。

    2.将 XSL 转换添加到 Web 服务代理策略窗口。要执行此操作,请选择 Transform 选项,并在加密操作之前将其拖放到策略窗口。(请参见图 16)。

图 16. 添加 XSL 转换
 


    3.双击 Transform 图标。这将显示一个窗口。单击 Upload 按钮,浏览到 set_cert_name.xsl 文件所在的位置,单击 OK。
    4.从输出列表框中选择 none,以避免样式表改变数据的内容。在此场景中,样式表的实际目的只是设置一个变量,而不是转换消息的内容。如果选择 auto 或 pipe 作为输出类型,则 SOAP 消息将通过样式表转换,并且其输出将发送到加密操作(策略页中的下一操作),从而改变了消息的内容。在图 17 中可以看到其具体情况。

图 17. 配置转换操作
 


    5.在运行时验证是否正确设置了 var://context/transaction/dynamicCertName 变量。要执行此操作,可以在 WebSphere DataPower SOA Appliances 的 ESB_Proxy Web 服务代理上启用探测器,并在 XSL 转换之前和之后检查上下文变量的内容。这样,您应能够看到变量的设置在转换之后仍是正确的并且直到加密操作结束时它的值也保持不变。
 
    结束语

    您学习了如何使用 WebSphere DataPower SOA Appliances 来提升 PKI。还学习了如何动态选择服务提供者的证书、执行标准 XML 加密并将加密的 SOAP 消息转发到 ESB。本系列的后续文章将介绍如何检测 ESB 以接受这些消息,执行协议切换,然后将这些消息转发到注册服务提供者的 JMS 主题。请继续关注!

0
相关文章