· [Java论坛][安全论坛][数据库论坛][操作系统论坛]
· [专题] 谷歌遭黑客攻击事件 2010网页挂马爆发之年
· [专题] IT经典最红榜单揭晓 微软BizSpark系列访谈
· [IT技术周刊][IT资源下载专区][病毒求助专区]
· [热点] 车模兽兽艳照暗藏木马 微虎搜索诞生挑战谷歌
· [热点] 英特尔称与谷歌被黑无关 学刘谦魔术小心挂马

连载:选择正确Web服务安全解决方案(四)

发布时间:2007.08.03 06:39     来源:赛迪网    作者:freedom

【原创翻译,版权所有,合作网站如欲转载,请注明原创翻译作者,及文章出处(赛迪网)。谢绝非合作网站转载,违者,赛迪网将保留追究其法律责任的权利!】

基于签名的身份验证

UsernameToken身份验证适合于客户端身份基于用户的情况,但是你的Web服务客户端可能是一个并不直接代表一个用户的服务器或者设备。可以考虑这样一种情况:一个处理船舶运载的Web服务通过检查定单的交付日期,将定单发送到适当的运载服务供应商。假定客户端是一个消息驱动的服务器定单应用程序,这个应用程序从一个队列中接收消息,并且通过调用运载和账单处理服务来处理定单。在这种情况下,运载服务的身份验证就必须限制为只能给定单应用程序服务器而不是特定的用户。

验证服务器和设备客户端的一种方法是使用XML签名。客户端使用一个私钥来签署SOAP消息,而Web服务使用相应的公钥来验证这个签名。正如在前面的关于加密的示例中所讨论的那样,必须生成一对公/私钥密码。一个密钥存储通常情况下存储着包含服务器公钥的X509证书。图2显示了基于签名的身份验证顺序:

配置XML签名的Web服务仍然是与特定服务器相关的,因此请参考你的服务器的相关文档。

为客户端增加签名需要与配置加密方式一样配置一个WSS4J处理程序。你可以用以前介绍的configureClientHandlers方法为这个处理程序增加代码:

private static void configureClientHandlers(Object svc) {
   Client client=Client.getInstance(svc);
   client.addOutHandler(new DOMOutHandler());
   // Add WSS4J signature Handler
   Properties sigProps = new Properties();
   configureSignature(sigProps);
   client.addOutHandler(new WSS4JOutHandler(sigProps));	
}

configureClientHandlers方法调用configureSignature的目的是指定处理程序的签名属性。其属性包含要签名的局部消息、签名属性文件的位置以及用于在SOAP报头中指定签名的方法:

protected static void configureSignature(Properties config)
    {
        // Signature Action
        config.setProperty(WSHandlerConstants.ACTION, WSHandlerConstants.SIGNATURE );
                
        // Method of specifying the signature in the header
        config.setProperty(WSHandlerConstants.SIG_KEY_ID, "DirectReference");
        
        // Signature Property File Location
        config.setProperty
(WSHandlerConstants.SIG_PROP_FILE, "com/dev/ws/client/driver/outsecurity_sig.properties");
        
        // Sign the Body part of the message
        String bodyPart = "{Content}{}Body";
        config.setProperty(WSHandlerConstants.SIGNATURE_PARTS,bodyPart);
    }

签名属性文件outsecurity_sig.properties指定了密钥存储的位置、口令、和签名者的别名:

org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
org.apache.ws.security.crypto.merlin.keystore.type=jks
org.apache.ws.security.crypto.merlin.keystore.password=keystorePass
org.apache.ws.security.crypto.merlin.alias.password=client344Password
org.apache.ws.security.crypto.merlin.keystore.alias=client-344-839
org.apache.ws.security.crypto.merlin.file=com/dev/ws/client/driver/clientStore.jks

通过可用的签名运行计算器的例子会产生如下的SOAP消息:

<soap:Envelope ...>
   <soap:Header>
      <wsse:Security ...>
         <ds:Signature ...>
            ...
            <ds:SignatureValue ...>
               Jx/wbsqjTsNZha+JDTCeCtNzUlaXAzWUOjyRCTQE6OQhiwQOpCt0gOd4mxsb5mI9Hrtr+0lSIZOJ
               dOHBKTqcCQNmQneM8CI/oeo0RwLSaMXh2fIA+/mZt+EBcS9+WB9Vdv4AnCWYr4/feAxJkioZwzXt
               9NquZMnC1nhRTMOoFpM=
            </ds:SignatureValue>
         ...
         </ds:Signature>
      </wsse:Security>
   </soap:Header>
   <soap:Body ...>
   ...
   </soap:Body>
<soap:Envelope>

注意SOAP的头部现在包括了一个SignatureValue成分,该成分包含着签名。服务器使用这个签名来验证SOAP消息的真实性。

基于签名的身份验证是一种用于保障服务安全性的有效方法,这些服务的客户是其它服务器和设备。签名还满足了应用程序对安全性的需要,这些应用程序需要每一项服务处理身份验证的合法证据。管理客户端和服务器证书的需要增加了总体的可维护性,而且必须在规划阶段就加以考虑。你应该清楚,这种方案并没有涉及到J2EE验证模式,因此它仅限于处理身份验证的需要。(责任编辑:李磊)

【相关文章】

《连载:选择正确Web服务安全解决方案(一)》

《连载:选择正确Web服务安全解决方案(二)》

《连载:选择正确Web服务安全解决方案(三)》


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· 连载:SOA安全性 一项艰苦的旅程(一) (08-02) · 让系统更安全 网管管理Windows的12个方法 (08-02)
· Windows XP中常见服务详细说明连载(二) (08-02) · 微软XP中启动的服务 详细解释说明 (08-01)
· Windows XP中常见服务详细说明连载(一) (08-01) · 连载:选择正确Web服务安全解决方案(三) (08-01)
· 经典推荐:由简到繁系统安全指南(二) (08-01) · 赛门铁克CEO:Google踏足安全市场不足为惧 (08-01)
· 提高警惕:及时发现应用程序的安全漏洞 (07-31) · 经典推荐:由简到繁系统安全指南(一) (07-31)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
资讯 通信 IT产品 IT技术 信息化
3.15赛迪网特别策划:消费者不是消“废”者
·专题:惠普栽在3.15前..
·深度观察:中国新能源汽..
·焦点解读:纯电动汽车能..
专题:三网融合 看起来很美!
·专题:动力100——助企..
·专题:三大运营商"扎堆"..
·专题:谷歌推智能手机Ne..
专题:回顾2009 原装耗材与兼容耗材发展
·专题:HP Photosmart Pl..
·专题:超薄超强 戴尔推..
·2009赛迪网年终评选 惠..
专题:RSA 2010信息安全大会
·专题:谷歌遭黑客攻击事..
·无处不挂马 2010年网页..
·龙存科技:由BizSpark成..