科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网网络频道连载:选择正确Web服务安全解决方案(二)

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

为了演示MLS,下面的例子对一个样本性的SOAP/HTTP消息进行了加密。这个作为示例用的是一个简单的计算器服务,其界面包括一个可以接受两个数字的乘法方法,还有一个使用Xfire and WSS4JJ框架的Java客户端。

作者:赛迪网 来源:赛迪网 2007年10月4日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)

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

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就算是一个在保密和加密方面不错的方案了。

下一节我们将讨论身份验证问题并且讨论一个最简单的方案:UsernameToken身份验证。(责任编辑:李磊)

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章