IBM Business Process Manager Standard V8.0.1(IBM BPM)提供了Web服务集成组件,该组件使IBM BPM服务能够调用外部Web服务。 集成组件提供了以下支持:发现Web服务,生成与WSDL相对应的IBM BPM数据类型以及与远程服务交换SOAP消息。
在许多情况下,Web服务调用需要安全地进行。 通常,这是通过使用传输层安全性(TLS)或安全套接字层(SSL)来保护请求和响应消息交换来实现的。 但是,这种方法有一些限制,例如,在使用中介路由消息时。 在这种情况下,由于中介需要解密数据,因此将有助于保护消息部分,而与传输安全性无关。 因为WS-Security协议可以帮助您加密SOAP消息,所以当通过中介路由消息时,它可以增强安全性。
在发送或接收SOAP消息时,WS-Security用于解决三种不同的安全性要求:
- 确保SOAP消息的完整性,也就是说,在发送给接收者时不会对其进行篡改。 这是通过使用数字签名来完成的。
- 确认SOAP消息的发送者或接收者的身份。 这可以通过使用安全性令牌(例如用户名令牌)来完成。
- 确保邮件是秘密发送的。 这是通过对SOAP消息或SOAP消息的一部分进行加密和解密来完成的。
在本文中,我们将研究如何使用Web服务集成组件来保护源自IBM BPM的Web服务请求。 我们将首先描述如何利用TLS,然后应用WS-Security来保护消息。 在WS-Security的上下文中,我们将专注于实现消息的完整性和机密性。 本文的目的不是介绍WS-Security或TSL的概念。 有关这些概念的更多信息,请参考建议的资源 。
为了说明WS-Security和TSL在IBM BPM作为Web服务客户端的情况下的工作方式,我们将使用在SoapUI上运行的模拟服务,此后将其称为Web服务提供者。
测试场景
图1所示的测试场景包括Web服务请求者和Web服务提供者的实例,每个实例都配置为支持传输和消息级安全性。
图1.测试场景
先决条件
要完成本文中的步骤,您将需要以下软件:
- 已配置Process Center的IBM Business Process Manager V8.0.1
- IBM Process Designer V8.0.1
- SoapUI 4.5.2
步骤概述
以下是我们将在本文中介绍的步骤的高级概述:
- 设置支持安全交互所需的密钥库。
- 设置Web服务提供商:
- 创建一个新项目,并将样本WSDL导入到Web服务提供程序中。
- 在Web服务提供者中生成与WSDL对应的模拟服务。
- 在IBM BPM和Web服务提供者中配置传输层安全性。
- 创建一个IBM BPM示例并安全地调用Web服务。
- 配置IBM BPM以支持Web服务交互的消息级安全性。
- 配置Web服务提供商以支持消息级安全性并测试方案。
设置支持安全交互所需的密钥库
在本节中,我们将设置两个密钥库,一个由IBM BPM使用,另一个由Web服务提供商使用。 出于本文的目的,我们将使用这些密钥库来包含个人证书以及交互合作伙伴的签名者证书(公共密钥)。 此外,我们将在配置中使用密钥库来支持SSL以及消息级安全性。 在实际情况中,您将不得不处理单独的信任库以及两端的证书信任链。
为IBM BPM创建密钥库
要创建密钥库,请完成以下步骤:
- 在IBM BPM安装根目录下的\ bin目录中,运行
ikeyman.bat。 - 选择密钥=>数据库文件=>新建 。
- 选择JKS作为密钥数据库类型,指定
clientkeystore.jks作为文件名,然后为密钥文件选择一个适当的目录,如图2所示。 - 在密码提示下,输入您选择的密码,例如WebAS ,然后单击OK 。
图2.创建密钥库
-
现在,您需要创建一个新的自签名证书。 这代表个人证书,并且包含公共和私有密钥对。 私有密钥由IBM BPM用于签署出站请求消息并解密传入的响应消息。
将提取公钥作为签署者证书,并将其导入到Web服务提供商的信任库中。 这使Web服务提供商可以验证数字签名是否也用于加密出站请求消息。 另外,通过将IBM BPM公钥添加到Web服务提供者的信任库中,可以在SSL握手(客户机认证)期间使用它来认证IBM BPM。
选择“ 新的自签名”并指定以下内容:
- 钥匙标签 :
ClientCertificate - 通用名称 :
bpms.com - 机构 :
MyOrg
- 钥匙标签 :
- 通过选择提取证书来提取证书 ,然后指定以下内容:
- 数据类型 :
Base 64 encoded ASCII data - 证书文件名 :
clientcertificate.arm - 位置 :
C:\temp3(或您选择的任何目录)
- 数据类型 :
为Web服务提供商创建密钥库
重复为IBM BPM创建密钥库中的步骤,为Web服务提供者创建密钥库。 不同之处在于:
- 在步骤3中,为密钥库名称指定
serverkeystore.jks。 - 在步骤5中,您需要创建一个自签名证书,该证书代表一个个人证书,并包含一个公共和私有密钥。 Web服务提供商使用私钥来签名出站响应消息并解密传入的请求消息。
将提取公共密钥作为签名者证书,并将其导入到IBM BPM的信任库中。 这使IBM BPM可以加密请求消息并验证传入响应消息的数字签名。 另外,通过将Web服务提供者的公钥添加到IBM BPM的信任库中,它可以在SSL握手(服务器认证)期间对Web服务提供者进行认证。
- 在步骤6中,指定以下值:
- 密钥标签 :
ServerCertificate - 通用名称 :
serviceprovider.com - 机构 :
MyOrg
- 密钥标签 :
- 在步骤7中,指定以下值:
- 数据类型 :
Base 64 encoded ASCII data - 证书文件名 :
servercertificate.arm - 位置 :
C:\temp3(或您选择的任何目录)
- 数据类型 :
现在您可以交换证书并将其导入到相应的信任库中:clientcertificate.arm将被添加到serverkeystore.jks,servercertificate.arm被添加到clientstore.jks。 请记住,出于本文的目的,我们为密钥库和信任库使用了相同的文件。
- 使用ikeyman打开serverkeystore.jks,然后在“ 密钥数据库内容”下选择“ 签署者证书 ”。
- 选择添加并指定以下内容:
- 文件名 :
clientcertificate.arm - 位置 :
C:\temp3
- 文件名 :
- 单击确定,然后输入
clientcertificate标签。 - 打开clientkeystore.jks,然后在“ 密钥数据库内容”下选择“ 签署者证书 ”。
- 选择添加并指定以下内容:
- 文件名 : servercertificate.arm
- 位置 : C:\ temp3
- 单击“ 确定”,然后指定
servercertificate的标签。
设置网络服务提供商
要配置Web服务提供者,请执行以下操作:
- 启动SoapUI并创建一个名为
SampleProvider的新工作区。 - 右键单击SampleProvider,然后选择New soapUI Project 。 从可下载资源部分下载Order.wsdl并将其保存到本地目录,例如C:\ DevW。
- 在New SoapUI Project向导中输入以下信息,如图3所示:
- 项目名称 :
OrderProject - 初始WSLD / WADL :
C:\DevW\Order.wsdl - 选中为所有操作创建示例请求,并为导入的WSDL创建Web服务模拟 ,然后单击确定 。
图3.创建新项目
- 项目名称 :
- 在图4所示的Generate MockService对话框中,指定以下内容:
- 为MockService选择<create> 。
- 检查订单 。
- 为Path指定
/mockPurchaseOrderBinding。 - 为端口指定
8088。 - 选中将MockServices端点添加到模拟的接口 ,然后单击确定 。
图4.生成模拟服务
- 单击“ 确定”,然后将
PurchaseOrderBinding MockService指定为模拟服务的名称。 - 选择SampleProvider => OrderProject => PurchaseOrderBinding MockService>订单> Response1。
- 双击Response1打开“ SOAP Response”窗口,然后输入以下代码,如图5所示:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:exam="http://example.org"> <soapenv:Header/> <soapenv:Body> <exam:OrderConfirmationType> <!--Optional:--> <exam:orderID>4321</exam:orderID> <!--Optional:--> <exam:expectedShipDate>25-Oct-2013</exam:expectedShipDate> </exam:OrderConfirmationType> </soapenv:Body> </soapenv:Envelope>图5. SOAP响应
- 关闭SOAP响应窗口。
在IBM BPM和Web服务提供者中配置传输层安全性
在本节中,我们将执行在IBM和Web服务提供商之间启用SSL(HTTPS)所需的步骤。
- 登录到WebSphere Integrated Solutions Console。
- 选择安全性=> SSL证书和密钥管理 。
- 选择密钥库和证书 。
- 单击“ 新建”以定义新的密钥库。 该密钥库将使用您先前使用ikeyman创建的clientkeystore.jks。
- 输入图6所示的以下信息,然后单击OK :
- 名称 :
ClientKeyStore - 说明 :可选说明。
- 管理范围 :选择适合您的环境的管理范围。 如果您将独立概要文件环境用于IBM BPM,请选择“节点”范围。 如果使用的是Deployment Manager环境,请选择单元作用域。 在图6中,选择了与独立配置文件相对应的Node作用域。
- Path :密钥库所在的路径。
- 密码:
WebAS(该密码必须与您在ikeyman中定义密钥库时提供的密码相同)。 - 类型 : JKS
图6.创建WebSphere Application Server密钥库
- 名称 :
- 单击确定,然后保存到主配置。
- 选择安全性=> SSL证书和密钥管理 ,然后选择SSL配置 。
- 单击New创建一个新的SSL配置,并输入以下信息,如图7所示:
- 名称 :
BPMWSLLConfig - 信任存储名称 :选择在步骤5中配置的ClientKeyStore 。
- 密钥库名称 :选择ClientKeyStore 。
- 默认服务器证书别名 : clientcertificate
- 默认客户端证书别名 : clientcertificate
- 管理范围 :选择适合您的环境的管理范围。 如果将独立概要文件环境用于IBM BPM,请选择“节点”范围。 如果使用的是Deployment Manager环境,请选择单元作用域。 在图7中,选择了与独立配置文件相对应的Node作用域。
图7.配置WebSphere Application Server SSL
- 名称 :
- 单击确定,然后保存到主配置。
- 作为使BPM起作用的BPM端的最后一步,您需要创建动态出站SSL配置。 为此,请选择安全性=> SSL证书和密钥管理,然后选择动态出站端点SSL配置 ,然后单击新建以创建新的配置条目。 指定以下信息,如图8所示:
- 名称 :
bmpsweboutbound - 管理范围 :选择适合您的环境的管理范围。 如果将独立概要文件环境用于IBM BPM,请选择“节点”范围。 如果使用的是Deployment Manager环境,请选择单元作用域。 在图8中,选择了与独立概要文件对应的Node作用域。
- 说明 :必填。
- 连接信息 :单击添加,然后选择适当的SSL配置,并选择证书别名。 在这种情况下,
*,*,8044是使用指定的SSL配置和证书别名的规则。 此规则指定,只要在端口8444上存在使用任何受支持协议到任何主机的出站连接,就使用指定的SSL配置(及其密钥库和信任库)和证书别名(以标识服务器的客户端)。 有关动态SSL配置的更多详细信息,请参见将安全套接字层配置与出站协议和远程安全端点动态关联 。 - SSL配置 : BPMWSSLLConfig
- 证书别名 : clientcertificate
图8.动态SSL配置
- 名称 :
- 单击确定,然后保存到主配置。
- 重新启动IBM BPM。
- 现在,我们将切换到Web服务提供商以启用使用SSL的通信。 在SOAP UI上,选择File => Preferences => SSL Settings。
- 指定以下信息,如下所示:
- KeyStore :提供serverkeystore.jks文件的完整路径。 这是您在“ 设置密钥库以支持安全交互”部分中创建的密钥库文件。 该密钥库主要用于出站SSL请求。
- 密钥库密码 :
WebAS - 选中启用模拟SSL 。
- 模拟端口 :
8044 - 模拟KeyStore :提供serverkeystore.jks文件的完整路径。 您在“ 设置密钥库以支持安全交互”中创建了此密钥库文件。 就本文而言,我们将使用相同的文件来配置模拟服务的密钥库和信任库。
- 模拟密码 :
WebAS - 模拟密钥密码 :
WebAS - 模拟TrustStore :提供serverkeystore.jks的完整路径。 这是您为Mock KeyStore指定的值。
- 模拟TrustStore密码 :
WebAS - 检查客户端身份验证 。
图9.配置Web服务提供者SSL
我们已使用WebAS作为密钥库和信任库密码 - 单击确定 。 现在,Web服务提供商可以在端口8444上接受SSL请求。
- 选择SampleProvider => OrderProject => PurchaseOrderBinding MockService并打开模拟服务。
- 右键单击PurchaseOrderBinding MockService,然后选择重新启动 。
创建一个IBM BPM示例并使用SSL安全地调用Web服务提供者
- 登录到Process Designer并创建示例流程应用程序,或者根据需要使用现有的应用程序。
- 打开流程应用程序,创建一个新的集成服务,并将其命名为
Web Service Tester。 - 转到Web Service Tester服务,然后将Web Service集成添加到打开的画布中,如图10所示。将开始和结束链接连接到此组件。
图10.在BPM中创建Web服务调用者
- 转到“ 调用Web服务”的“ 属性”选项卡,然后在“ 实现=>发现 ”下,为WSDL URI
http://<hostname where SOAP UI is running>:8088/mockPurchaseOrderBinding?wsdl>输入以下内容http://<hostname where SOAP UI is running>:8088/mockPurchaseOrderBinding?wsdl。 - 单击查看,并验证是否可以访问WSDL文件。
- 单击发现以建立与WSDL文件的连接,并获取操作和服务详细信息,如图11所示。
图11.配置调用者
- 验证端点地址URL使用端口8044。这是我们在Web服务提供程序中为SSL配置的端口。 此端口还与我们的动态出站SSL配置中配置的端口匹配。 因此,WebSphere运行时将使用与此SSL配置关联的密钥库和信任库。
- 在“ 属性”选项卡上的“ 数据映射”的“ 输入映射”部分中,更新以下值,如图12所示:
- 数量
5 - productName的
"Chairs"
图12.指定输入数据
- 数量
- 同样在“ 输入映射”部分中,单击“ 自动映射”以调出向导以映射Web服务连接器输入参数。 选择显示的项目以完成响应映射。
- 现在,您可以使用SSL测试Web服务了。 通过点击调试服务在服务图的右上角运行在调试模式的业务。
- 单击Step转到下一步,并验证是否已收到SOAP UI中设置的Web服务响应,如图13所示。
图13.验证输出数据
- 单击运行以完成服务执行。
- Web服务请求和响应也记录在Web服务提供者中。 您可以在模拟服务消息日志中找到详细信息,如图14所示。
图14.使用SSL的传入SOAP消息
配置IBM BPM以支持Web服务交互的消息级安全性
- 打开与您的BPM配置文件相对应的100Custom.xml文件。
- 将清单1中所示的代码添加到100Custom.xml文件中,然后重新启动IBM BPM服务器。
清单1.为消息级安全性配置100Custom.xml
<server>
<webservice-security merge="mergeChildren">
<keystore-file merge="replace">C:\temp3\ClientKeyStore.jks</keystore-file>
<keystore-password-encrypted merge="replace"><![CDATA[Bq/GXLNbHz/aMv1FPkGeCQ==:
To5WJ7gVecQ+Vx9TtE2K8A==]]>
</keystore-password-encrypted>
<private-key>
<alias>clientcertificate</alias>
<keyname>clientcertificate</keyname>
<password-encrypted><![CDATA[Bq/GXLNbHz/aMv1FPkGeCQ==:
To5WJ7gVecQ+Vx9TtE2K8A==]]>
</password-encrypted>
</private-key>
<private-key>
<alias>servercertificate</alias>
<keyname>servercertificate</keyname>
</private-key>
<keystore-type>JKS</keystore-type>
<certificate>C:\temp3\clientcertificate.arm</certificate>
</webservice-security>
</server>
在中,您将看到表1中所示的元素。
表1.消息级安全性元素
| 元件 | 说明 |
|---|---|
| 密钥库文件 | 您先前为SSL配置创建的密钥库文件。 |
| 密钥库密码加密 | 与密钥库对应的加密密码。 要加密密码,可以使用java -cp utility.jar com.lombardisoftware.utility.EncryptPassword <password> |
| 别名(在第一个私钥元素下) | 这对应于密钥库中个人证书的别名。 与该证书关联的私钥用于对请求进行数字签名并解密SOAP响应消息。 |
| 键名(在第一个私钥元素下) | 与别名相同。 |
| 密码加密(在第一个私钥元素下) | 与密钥库密码加密相同。 |
| 别名(在第二个私钥元素下) | 这对应于密钥库中签名者证书的别名。 与此证书关联的公共密钥用于加密SOAP请求并验证SOAP响应消息中的签名。 |
| 键名(在第二个私钥元素下) | 与别名相同。 |
| 密钥库类型 | JKS(我们正在使用JKS密钥库)。 |
| 证书 | Web服务请求者的证书文件的路径。 这是确保出站通信安全所必需的。 |
配置Web服务提供商以支持消息级安全性并测试方案
我们将测试以下两种情况:
- 场景1:IBM BPM发送一个已签名的请求,并从Web服务提供商处接收一个加密的响应。
- 方案2:IBM BPM发送一个加密的请求,并从Web服务提供商处接收签名的响应。
可以测试涉及消息加密和签名的其他几种方案和组合。 但是,请注意,您将无法同时将消息加密和签名应用于响应消息,因为您可能会遇到此处提到的问题。
还要注意,目前无法加密请求消息部分或接受带有加密消息部分的响应。 加密必须应用于SOAP主体。
测试场景1
- 切换到SOAP UI上的工作区。
- 双击OrderProject以打开项目的配置对话框。
- 在WS-Security Configurations的Keystores选项卡中,为serverkeystore.jks创建一个新条目,如图15所示。
图15.服务器密钥库
- 在“ 传入的WS-Security Configuration”选项卡中,为serverkeystore.jks创建一个新条目,如图16所示。使用与密钥库关联的密码,例如WebAS。
图16.传入的WS Security配置
- 在“ 发送WS-Security配置”选项卡中,添加新条目以进行响应加密。 首先添加具有唯一
client名称的新的传出WSS配置,然后为Encyrption添加新的WSS条目。 然后指定以下内容,如图17所示:- 密钥库 :
serverkeystore.jks
图17.传出的WS安全性加密
- 密钥库 :
- 选择Ctrl + S保存配置更新。
- 选择SampleProvider => OrderProject => PurchaseOrderBinding MockService,然后在左下角的MockService Properties部分中,将Incoming WSS设置为server ,如图18所示。
图18.配置SOAP响应
- 单击Ctrl + S保存配置更新。
- 重新启动模拟服务。
- 重新启动Process Designer,并在测试SSL配置时打开您先前创建的服务。
- 转到“ 安全性”选项卡并更新以下属性,如图19所示:
- 为“ 验证”选择“ 无 ”。
- 为客户端证书别名指定
clientcertificate,然后选中“ 签署请求”和“ 期望加密响应” 。 - 指定
servercertificate: serviceprovider.com作为服务器证书别名 。
图19.为测试场景1配置SOAP安全性
- 将更新保存到服务。
- 在调试模式下运行服务,并验证是否从Web服务提供商处收到了相同的响应。
- 如果收到java.net.ConnectException,请再次重新启动模拟服务。
- 转到Web服务提供者,并在Message Log下 ,您应该看到与完成的Web服务请求相对应的条目,如图20所示。
图20.场景1中的SOAP请求消息
- 双击条目以打开“邮件查看器”。
- 在各自的Raw部分下检查请求和响应消息。 在tequest消息中,您应该在SOAP
Header元素内看到一个ds:Signature元素。 在响应消息中,您应该在SOAPBody元素内看到一个xenc:EncryptedData元素。
测试方案2
- 在SOAP UI中,打开与模拟服务项目关联的WS-Security Configuration选项卡。
- 在“ 传出WS-Security”选项卡上,如下所述输入属性,但是首先删除Encryption项并为Signature添加一个项,如图21所示。
- 密钥库 : serverkeystore.jks
- 别名 :服务器证书
- 密码 :
WebAS - 密钥标识符类型 : 二进制安全令牌
- 签名算法,签名规范化和摘要算法 : <默认>
- 选中使用单个证书进行签名 。
图21.方案2中的传出WS-Security签名
- 单击Ctrl + S保存配置更新。
- 重新启动模拟服务。
- 重新启动Process Designer并在测试SSL配置时打开先前创建的服务。
- 转到“ 安全性”选项卡并按如下所示更新属性,如图22所示:
- 为“ 验证”选择“ 无 ”。
- 为客户端证书别名指定
clientcertificate。 - 指定
servercertificate: serviceprovider.com服务器证书别名 ,并检查加密的要求和期待签名响应
图22.为方案2配置SOAP安全性
- 将更新保存到服务。
- 在调试模式下运行服务,并验证是否从Web服务提供商处收到了相同的响应。
- 如果收到java.net.ConnectException,请重新启动模拟服务。
- 转到Web服务提供商,然后在Message Log(消息日志)下,您将看到与已完成的Web Services请求相对应的条目,如中所示。
图23. SOAP请求消息场景1
- 检查请求和响应消息各自的原始部分。 在Request消息中,您应该在SOAP Body中看到一个
enc:EncryptedDataelement元素。 在Response消息中,您应该在SOAPHeader看到一个ds:Signature元素。
结论
在本文中,您学习了如何配置IBM BPM,以便在使用Web服务集成组件与安全Web服务进行交互时启用WS-Security和传输层安全性。 使用SOAP UI之类的工具,您可以独立于实际的Web服务提供商的可用性而轻松地验证配置。
致谢
作者要感谢Raj Chaudhary对本文的详尽评论。
翻译自: https://www.ibm.com/developerworks/bpm/library/techarticles/1309_balakrishnan/1309_balakrishnan.html
本文介绍如何配置IBMBPM使用Web服务集成组件与安全Web服务交互时启用WS-Security和传输层安全性,通过使用SOAPUI验证配置。
1047

被折叠的 条评论
为什么被折叠?



