Web Service 、WS-Security、Java和.net的互通(三)

日期: 2007-12-24 来源:TechTarget中国

  对于认证模式场景需求问题的解决

  ASF对于Web Service Security这部分只是要求了Signature,而对于Signature需要提供两种方式,UserNameToken和X.509证书。前者提供给内部的一些应用使用,后者提供给外部ISV使用,两者主要差别也就是在性能上,后者经过测试,在CPU的使用上,是6-8倍于不带Signature的Web Service。

  UserNameToken这种模式很简单,就很类似于我们平常的用户认证,用户名和密码作为明文或者加密,嵌入在Soap Header中即可,客户端根据本地保存的受信用户记录来交验是否是合法用户。

  X.509就比较特殊一些,所谓的证书,其中包括了公钥私钥对(作为签名和认证使用),证书颁发者的信息(可能是一些CA机构或者是用本地的证书生成工具自己生成),证书拥有者的身份信息,以及一些导入的受信第三方的公钥证书。当前的证书方式的签名认证主要有两种模式,一种是双方证书都是由第三方CA认证,同时双方都将对方的CA作为可信的CA,那么请求发起方将会把自己的证书放入到Soap Header中,接受方接受到请求以后,获取证书,发现是受信的CA,那么就认为请求发起方身份可信,同时在作完整性摘要校对。另一种模式就是双方的证书可以没有任何权威的CA作保证,但是双方首先就需要将附带自己公钥的证书发送给对方,对方将这附带有公钥的证书分别导入到证书管理库中(java是某个JKS,.net是windows的当前用户或者本机的证书管理文件)。双方交互的时候不需要将证书置入Soap Header中,但是需要将证书的引用标示(序列号或者是X.509 SubjectKeyIdentifier)传递给服务端,服务端根据标示在本地的证书库中查找并且校验,这种模式的好处就是不需要CA的认证(省钱)同时传递的时候不需要将证书带入到Header中,节省了传递报文的大小,缺点就是双方需要互相保存对方的公钥证书到本地的证书库中,同时这种模式也为跨平台带来了很多问题,后续的互通中就会提到。

  ASF的证书认证模式中采用了后者,因为要求每个ISV去有一个第三方CA作为授权不是很可行,但是问题就是如果ISV需要导入我们的公钥证书比较方便,但是我们需要管理那么多ISV的证书,同时又需要动态上传修改保存证书那么就不能用原有的手动导入的模式,同时由于到时候部署的服务器集群不可能都维护一份本地的证书库,因此需要用数据库手段来维护,但是在应用启动以后再要新增或者修改证书,将会比较麻烦,因此采取了扩展wss4j的策略读取方式来适应新的应用场景。

   扩展的CrytoProvider类图

   扩展后的keystore 初始化以及signature部分流程图

  这部分设计主要是扩展了WSS4J的CrytoProvider,扩展后的CrytoProvider重载了获取X509证书的几个方法,这里类似于AOP,通过提供ICertsLoaderHandler接口来回调获取其它存储内的certs 构建 visual keystore,同时在作signature的时候,如果发现ISV的cert不存在于当前的visual keystore 中根据CrytoProvider的接口实现,来决定是全部刷新还是部分获取刷新当前的visual keystore中的certs。这样就可以达到了动态装载和刷新certs的要求,同时根据性能要求选择配置和实现不同的CrytoProvider。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐