如何选择正确的Web服务安全解决方案

互联网 | 编辑: 杨剑锋 2007-08-08 15:42:00转载 一键看全文

加密过程

在XFire框架中,你使用处理程序来处理客户端的SOAP消息。每一个处理程序接受一套属性,这些属性可以规定WSS4J必须实施的消息安全性。为了执行加密,你必须为以下的几个方面规定属性:

客户端公钥的存储位置

加密的运行法则

要进行加密的消息的部分

下面列示计算器服务的客户端加密代码:

protected static void configureEncryption(Properties config)
    {
        // Encrypt action
        config.setProperty(WSHandlerConstants.ACTION, WSHandlerConstants.ENCRYPT);
        
        //The property file describes the public key used for encryption
        config.setProperty(WSHandlerConstants.ENC_PROP_FILE,
                               "com/dev/ws/client/driver/outsecurity_enc.properties");
        
        config.setProperty(WSHandlerConstants.ENCRYPTION_USER, "serveralias");
        
        // The encryption algorithm
        config.setProperty(WSHandlerConstants.ENC_SYM_ALGO,WSConstants.TRIPLE_DES);
        
        // Encryption Key Identifier Types
        config.setProperty(WSHandlerConstants.ENC_KEY_ID, "SKIKeyIdentifier");
 
        // Encrypt the SOAP body
        String bodyPart = "{Content}{}Body";
        config.setProperty(WSHandlerConstants.ENCRYPTION_PARTS, bodyPart);
}

注意:客户端的密钥存储配置包含在属性文件outsecurity_enc.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=serveralias
org.apache.ws.security.crypto.merlin.file=com/dev/ws/client/driver/clientStore.jks

一旦客户端和服务器配置完毕,运行客户端就会在TCP/IP监视器上产生如下的SOAP消息:

<soap:Envelope ...>
   <soap:Header>
      <wsse:Security ...>
         <xenc:EncryptedKey ...>
            <xenc:EncryptionMethod
               Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
            <ds:KeyInfo ...>
            ...
            </ds:KeyInfo>
            <xenc:CipherData>
               <xenc:CipherValue>
               M+Tp2Q4ZtBJtpT1q7SkOALNnpv57Cgh/4EHV0gHONtUZsYQLIVYYWNdYqIkjb81pgxBFU94WKQK
               au2BEZbF8rL4KdA9tdfb3McRzCOJDcGl4eDs2FC1Pe1Bj0b2VJ+m4D83EhGSsUEeItp+SZcF0Kw
               jh5dEcV61Q4cscMZaruSg=
               </xenc:CipherValue>
            </xenc:CipherData>
         </xenc:EncryptedKey>
         <xenc:EncryptedData ...>
            <xenc:CipherData>
      <xenc:CipherValue...>

P8D3xHloRUSCvMA7gNaezLTtENS2R6oXJ8jByaBKvBl5t4joml2qIo9V2LXsnM3nuYJun2UADKfg...
            </xenc:CipherValue>
            </xenc:CipherData>
         </xenc:EncryptedData>
      </wsse:Security>
   </soap:Header>
   <soap:Body>
      <xenc:EncryptedData ...>
			
         <xenc:CipherData ...>
            <xenc:CipherValue ...>
               dIxwIHuC9TCLbSmfsgohBr2A81lY+GfPA7lofgXPcMvcblO+hOVeiKMyxXvuZF8M2fEtmHTa3kVY
               fNDYFAKauoDwq4lWBKMuk4f0s8mTkhyBJrMmbD2mrw==
            </xenc:CipherValue>
         </xenc:CipherData>
      </xenc:EncryptedData>
   </soap:Body>
</soap:Envelope>

这个SOAP消息现在已经被加密,并且明文已经被其密码数值所替换。这个SOAP报头包含着加密方法的信息。

本示例演示了一个大体的配置,它需要使用消息级安全(Message Level Security)来执行加密。虽然消息级安全与TLS相比,在性能和对端到端的安全性的支持方面拥有十分确定的优越性,你必须考虑它本身所带来的额外的复杂性。对于许多应用程序来说,对这种精细的和端到端的消息安全的支持并非关键所在,而TLS就算是一个在保密和加密方面不错的方案了。(下一页)

提示:试试键盘 “← →” 可以实现快速翻页 

一键看全文

本文导航

相关阅读

每日精选

点击查看更多

首页 手机 数码相机 笔记本 游戏 DIY硬件 硬件外设 办公中心 数字家电 平板电脑