- Web服务安全网关:通过DataPower上的Web Service Proxy服务实现。以下将逐步详细介绍DataPower实现Web服务安全网关的配置及验证过程。
3.2.1 构建Web Services Proxy服务
首先,通过DataPower的Web管理控制台,创建一个名为WSP4SecurityGWDemo的Web Services Proxy服务,并在其WSDLs项目中,将描述Web服务OderAirTicketService的WSDL文件OderAirTicketService.wsdl上载到DataPower上,如图3.3所示:
图3.3
其次,修改OderAirTicketService的Remote Hostname为Web服务提供者的IP地址:9.181.50.166,并为其创建名为HPFH4GW,类型为HTTP Front Side Handler的Local endpoint handler,并为其设置port为9080。这里,Local endpoint handler将负责接受客户端的请求。如图3.4所示:
图3.4
在其他设置都保持默认,应用并保存设置后,WSP4SecurityGWDemo就已经可以作为OderAirTicketService的代理开始工作了。通过在Web服务客户端上输入如下命令,即可测试WSP4SecurityGWDemo是否工作正常。
curl --data-binary @AirTicket.xml
[url]http://9.181.49.55:9080/OrderAirTicket/services/OrderAirTicketService[/url]
|
得到如图3.5所示的结果,则证明WSP4SecurityGWDemo工作正常。
图3.5
重复上面步骤可以将另两个Web服务加入到WSP4SecurityGWDemo中。通过如下命令,即可对另两个Web服务进行相应的测试。
curl --data-binary @FootBallTicket.xml
[url]http://9.181.49.55:9080/OrderFootBallTicket/services/OrderFootBallTicketService[/url]
curl --data-binary @TrainTicket.xml [url]http://9.181.49.55:9080/OrderTrainTicket/services/OrderTrainTicketService[/url]
|
以上生成的Web Service Proxy仅仅提供了代理的基本功能,下面我们将分步实现SSL连接,访问控制和数字签名的功能。
3.2.2 实现基于SSL的SOAP消息传输
为实现客户端与DataPower之间基于HTTPS的SOAP消息传输,我们仅需要为WSP4SecurityGWDemo创建类型为HTTPS Front Side Handler的Local endpoint handler,并替换HPFH4GW即可。为支持SSL连接(这里我们采用单向的SSL),服务端需要配置用于加密信息的密钥对,并为客户端提供数字证书。这里我们通过DataPower提供的Crypto tool来生成密钥和自签署证书。
如图3.6所示,在Crypto tool的Generate Key项目中,输入Key的常规信息,并选择Generate self-signed certificate,同时common name应指定为DataPower的IP地址或hostname,然后点击“Generate Key”按钮,生成密钥和证书。
图3.6
通过DataPower File Management工具,如图3.7所示,可以从DataPower的temporary目录下载名为SecurityGWDemo-sscert.pem的证书文件到Web服务的客户端,以提供给cURL工具用于与DataPower建立SSL连接。
图3.7
为创建类型为HTTPS Front Side Handler的Local endpoint handler,需要先为其创建Crypto profile对象,该对象定义了SSL认证方式和对应的密钥,如图3.8所示,在名为CP4SecurityGWDemo的Crypto profile中,我们仅需要指定Identification Credentials及其包含的密钥及证书即可,这里密钥及证书的显示名称为其common name。
图3.8
完成以上步骤后,如图3.9所示,创建名为SSLFSH4GW,类型为HTTPS Front Side Handler的Local endpoint handler时,仅需要指定端口并选择Crypto profile对象即可。这里端口指定为9443。再用SSLFSH4GW为每个Web服务替换原有Local endpoint handler――HFSH4GW,在保持其他默认设置并应用保存设置后,WSP4SecurityGWDemo即可实现与客户端SSL连接,HTTP连接和无法通过认证的SSL连接都将被拒绝。
图3.9
通过在Web服务客户端上输入如下命令,即可测试WSP4SecurityGWDemo与Web服务客户端的SSL连接是否工作正常。
curl --cacert SecurityGWDemo-sscert.pem --data-binary @AirTicket.xml
[url]https://9.181.49.55:9443/OrderAirTicket/services/OrderAirTicketServicee[/url]
|
如图3.10所示,原有的HTTP连接将被DataPower拒绝,通过SSL认证的HTTPS连接可以被DataPower接受并转发给Web服务的提供者,并返回正确的结果。由此,通过HTTPS协议保证了传输过程中数据的机密性。
图3.10
通过如下命令,可以通过HTTPS对另两个Web服务进行访问。
curl --cacert SecurityGWDemo-sscert.pem --data-binary @FootBallTicket.xml
[url]https://9.181.49.55:9080/OrderFootBallTicket/services/OrderFootBallTicketService[/url]
curl --cacert SecurityGWDemo-sscert.pem --data-binary @TrainTicket.xml [url]https://9.181.49.55:9080/OrderTrainTicket/services/OrderTrainTicketService[/url]
|
3.2.3 实现访问控制
在本场景中,我们采用TAM作为访问控制器,DataPower从SOAP消息中取得用户标识和需要访问的目标资源都需要通过TAM进行认证和授权。为实现访问控制,需通过如下步骤完成:
1.配置TAM对象:通过DataPower的Web控制台提供了如下的配置向导,如图3.11所示,在TAM配置文件生成向导中填写了所有必要内容后,DataPower将会自动从TAM中取得与TAM进行SSL连接所必须的数字证书,并在本地生成相应的密钥文件。
图3.11
此外,在配置向导中还需要配置Authorization Server Replica,如图3.12所示。在完成以上步骤并保存配置后,即完成了名为tam的TAM对象配置。
图3.12
2.为WSP4SecurityGWDemo配置AAA action:在Web Service Proxy的Policy项目中,可以在不同层次上配置SOAP消息的处理规则(rule),每个规则可由多个action组成,每个action负责对SOAP消息进行不同的处理,由此,整个rule就可以构成一个对SOAP消息的处理流程。其中AAA action负责处理认证、授权和审计的操作。如图3.13所示,我们为request-rule添加AAA action,双击AAA图标,即可通过提供的向导进行必要配置。
图3.13
这里我们为AAA action定义了名为AAA4SecurityGWDemo的policy,该policy包括了如下内容:
1)抽取用户标识的方式:为支持Username令牌,选择“password-carrying Username Token Element from WS-security Header”。如图3.14所示,通过该向导,我们可以同时选择多种抽取用户标识的方式,以支持不同的客户。
图3.14
2)用户的认证方式:如图3.15所示,选择“Contact Tivoli Access Manager”,并在Tivoli Access Manager Configuration中选择“tam”。
图3.15
3)抽取被访问资源的方式:由于在TAM中,我们定义的被保护的资源形式为URL,因此,如图3.16所示,这里选择“URL Sent to Back End”。通过该向导,我们可以同时选择多种抽取被访问资源的方式,以支持不同的客户。
图3.16
4)授权认证方式:如图3.17所示,选择“Contact Tivoli Access Manager”,并在Tivoli Access Manager Configuration中选择 “tam”,其余项目保持默认值。完成以上设置后,在此场景中,AAA policy的其他设置保持默认设置即可。
图3.17
3、除去SOAP消息体中的安全性元素:当SOAP消息通过了AAA验证之后,即可除去消息体中的安全性元素,将其发送给后端的Web服务提供者。在Web Service Proxy的Policy项目中,可在AAA action之后,为request-rule添加Transform action,此类action可以通过指定的XSLT文件对SOAP消息进行任意形式的格式转换,在此,我们通过如下的delelteSecurityElements.xslt实现除去SOAP消息体中的安全性元素。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:dp="http://www.datapower.com/schemas/management">
<soapenv:Header/>
<soapenv:Body>
<xsl:copy-of select="//*[local-name()='Envelope']/*[local-name()='Body']/*" />
</soapenv:Body>
</soapenv:Envelope>
</xsl:template>
</xsl:stylesheet>s
|
将delelteSecurityElements.xslt上载到DataPower上后,通过双击Transform action图标即可对其进行必要配置。如图3.18所示,该配置过程中,仅需要将delelteSecurityElements.xslt指定为“Processing Control file”,其他设置保持默认值即可。
图3.18
通过以上三个关键步骤的配置,WSP4SecurityGWDemo已经具备了对Web服务客户端的请求进行身份及授权认证的功能,我们通过以下的命令可对此进行验证:
curl --cacert SecurityGWDemo-sscert.pem --data-binary @AirTicket_ut.xml
[url]https://9.181.49.55:9443/OrderAirTicket/services/OrderAirTicketService[/url]
curl --cacert SecurityGWDemo-sscert.pem --data-binary @FootBallTicket_ut.xml
[url]https://9.181.49.55:9443/OrderFootBallTicket/services/OrderFootBallTicketService[/url]
curl --cacert SecurityGWDemo-sscert.pem --data-binary @TrainTicket_ut.xml
[url]https://9.181.49.55:9443/OrderTrainTicket/services/OrderTrainTicketService[/url]
|
在AirTicket_ut.xml,FootBallTicket_ut.xml和TrainTicket_ut.xml中,除了原有的SOAP消息体外,所包含了带有Username令牌的wsse:Security安全元素。其中,每个文件中Username令牌都带有对相应的Web服务具有访问权限的用户名和口令,因此,以上3条命令都将会得到Web服务提供者正确的相应。如果任意修改文件中用户名及口令,或以不具备访问权限的用户对Web服务发送请求,都将无法通过DataPower的验证而被拒绝,从而保证了访问的合法性。
例如,将FootBallTicket_ut.xml中的用户UserB的口令从userB4demo改为userBb4demo,再向DataPower请求OrderFootBallTicketService时,如图3.19所示,该请求将无法通过DataPower的用户验证而被拒绝。
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:dp="http://www.datapower.com/schemas/management">
<soapenv:Header>
<wsse:Security soapenv:mustUnderstand="1"
xmlns:wsse=
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken>
<wsse:Username>userB</wsse:Username>
<wsse:Password Type=
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0
#PasswordText">
userBb4demo</wsse:Password></wsse:UsernameToken></wsse:Security>
</soapenv:Header>
<soapenv:Body>
<p555:dealFootBallTicket xmlns:p555="http://orderFootBallTicket.service.ibm.com">
<ord>
<listprice>300.0</listprice>
<order_type>5</order_type>
<start_date>2007-02-07T16:00:00.000Z</start_date>
</ord>
</p555:dealFootBallTicket>
</soapenv:Body>
</soapenv:Envelope> |
图3.19
3.2.4 实现数字签名验证
在DataPower中,数字签名的验通过Verify Action来实现,如图3.20所示,通过Web控制台,在Web Service Proxy的Policy项目中,为request-rule添加Verify action,全部设置保持默认值即可。
图3.20
通过以上配置,WSP4SecurityGWDemo已经具备了对Web服务客户端的请求进行数字签名验证的功能,我们通过以下的命令可对此进行验证:
curl --cacert SecurityGWDemo-sscert.pem --data-binary @AirTicket_ut_ds.xml
[url]https://9.181.49.55:9443/OrderAirTicket/services/OrderAirTicketService[/url]
curl --cacert SecurityGWDemo-sscert.pem --data-binary @FootBallTicket_ut_ds.xml
[url]https://9.181.49.55:9443/OrderFootBallTicket/services/OrderFootBallTicketService[/url]
curl --cacert SecurityGWDemo-sscert.pem --data-binary @TrainTicket_ut_ds.xml
[url]https://9.181.49.55:9443/OrderTrainTicket/services/OrderTrainTicketService[/url]
|
其中AirTicket_ut_ds.xml,FootBallTicket_ut_ds.xml和TrainTicket_ut_ds.xml,是AirTicket_ut.xml,FootBallTicket_ut.xml和TrainTicket_ut.xml通过WSSec方法进行数字签名后得到的SOAP文件,以上三条命令都会得到Web服务提供者正确的相应,如果修改上述三个SOAP文件中的任意部分或对于没有数字签名的SOAP消息,都将无法通过DataPower的签名验证而被拒绝,从而保证了数据的完整性。
例如,将TrainTicket_ut_ds.xml中的listprice从500.0改为501.0,再向DataPower请求OrderTrainTicketService时,如图3.21所示,该请求将无法通过DataPower的数字签名验证而被拒绝。
<soapenv:Body wsu:Id="Body-356a8483-8b54-40ef-a32b-f437c5bfc542" xmlns:wsu=
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<p400:dealTrainTicket xmlns:p400="http://orderTrainTicket.service.ibm.com">
<ord>
<from_location>SH</from_location>
<listprice>501.0</listprice>
<order_type>3</order_type>
<start_date>2007-02-07T16:00:00.000Z</start_date>
<to_location>BJ</to_location>
</ord>
</p400:dealTrainTicket>
</soapenv:Body>
|
图3.21
4 结论
基于WebSphere DataPower构建Web服务安全网,可有效地满足Web服务安全网在访问合法性,数据机密性和完整性这三方面的需求。DataPower提供几乎线速地处理XML/Web服务任务的能力,作为硬件产品和封闭系统所具备有更高的可靠性和安全性,以及本身提供的集群架构,都大大提升了Web服务安全网关的整体能力;同时,DataPower全部功能的实现仅需要通过配置即可完成,作无需客户修改应用代码,为SOA专用设备,它可以通过以太网非常便捷地嵌入客户现有的系统架构中,无需修改现有IT系统的架构,将大大简化应用的开发、部署工作,降低系统管理与维护的成本。因此,我们有理由相信,DataPower将有越来越多的机会,成为IBM客户手中独特的SOA利器。
致谢
感谢IBM SW Techline经理刘京的大力支持,感谢Techline同事胡云飞提供Web服务程序,感谢Techline同事伍棵松协助配置TAM,也感谢Techline同事张为普和罗鹏的大力协助。