科技行者

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

知识库

知识库 安全导航

至顶网软件频道应用软件基于XFire实施WS-Security(第三部分)

基于XFire实施WS-Security(第三部分)

  • 扫一扫
    分享文章到微信

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

服务端处理加密的SOAP请求报文前,需要通过Handler将其解密。解密的操作需要访问serverStore.jks的server私钥,所以要进行相应的配置。

作者:闹市孤僧 2007年5月30日

关键字:

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

客户端

客户端通过注册OutHandler使用server数字证书中的公钥对报文体进行加密,server数字证书不需要访问密钥,因此客户端仅需要指定访问server数字证书的必要信息即可:

代码清单19 BbtForumServiceEncClient

package com.baobaotao.xfire.wss4j.client;

public class BbtForumServiceEncClient {

private static XFireProxyFactory serviceFactory = new XFireProxyFactory();

public static void main(String[] args) {

Service serviceModel = new ObjectServiceFactory().create(BbtForumService.class);

try {

String serviceURL = "http://localhost:8080/baobaotao/service/BbtForumServiceEnc";

BbtForumService service =(BbtForumService) serviceFactory.create(serviceModel,

serviceURL);

 

Client client = ((XFireProxy)Proxy.getInvocationHandler(service)).getClient();

client.addOutHandler(new DOMOutHandler());

Properties properties = new Properties();

properties.setProperty(WSHandlerConstants.ACTION, ①设定加密动作

WSHandlerConstants.ENCRYPT);

②报文加密需要访问server数字证书,并获取其中的server公钥,

server数字证书位于密钥库中,通过属性文件提供相应的信息

properties.setProperty(WSHandlerConstants.ENC_PROP_FILE,

"com/baobaotao/xfire/wss4j/client/outsecurity_enc.properties");

③设定加密所使用的公钥用户(对应密钥库中数字证书的别名)

properties.setProperty(WSHandlerConstants.ENCRYPTION_USER, "server");

client.addOutHandler(new WSS4JOutHandler(properties));

int count = service.getRefinedTopicCount(20);

System.out.println("count:"+count);

} catch (MalformedURLException e) {

e.printStackTrace();

}

}

}

outsecurity_enc.properties定义了访问clientStore.jks的必要信息,包括密钥库访问密码、密钥库文件位置:

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=storepass①密钥库访问密码

org.apache.ws.security.crypto.merlin.file=META-INF/xfire/clientStore.jks②密钥库文件位置

运行BbtForumServiceEncClient,观察加密后的SOAP请求报文,其结构如下所示:

1 <soap:Envelope>

2<soap:Header>

3<wsse:Security>

4<xenc:EncryptedKey Id="EncKeyId-4694228">

5<xenc:EncryptionMethod

6Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />

7<ds:KeyInfo>

8<wsse:SecurityTokenReference>

9<ds:X509Data>

10<ds:X509IssuerSerial>

11<ds:X509IssuerName>

12CN=server

13</ds:X509IssuerName>

14<ds:X509SerialNumber>

151176124843

16</ds:X509SerialNumber>

17</ds:X509IssuerSerial>

18</ds:X509Data>

19</wsse:SecurityTokenReference>

20</ds:KeyInfo>

21<xenc:CipherData>

22<xenc:CipherValue>

23Gos2iKQS…

24</xenc:CipherValue>

25</xenc:CipherData>

26<xenc:ReferenceList>

27<xenc:DataReference URI="#EncDataId-18687346" />

28</xenc:ReferenceList>

29</xenc:EncryptedKey>

30</wsse:Security>

31</soap:Header>

32<soap:Body>

33<xenc:EncryptedData Id="EncDataId-18687346">

34<xenc:EncryptionMethod

35Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc"/>

36<xenc:CipherData>

37<xenc:CipherValue>

38CCwZvucWxtuHgMxkvEZnZ…

39</xenc:CipherValue>

40</xenc:CipherData>

41</xenc:EncryptedData>

42</soap:Body>

43 </soap:Envelope>

BbtForumServiceEncClient对SOAP加密主要完成了以下几个操作:

  • soap:Body的内容被加密(32~42);
  • 使用的算法是aes128-cbc对称加密算法(35);
  • 对称密钥被公钥加密后也包含在该消息中传输(21~25),使用的加密算法RSA (6);
  • 使用server的数字证书对对称密钥进行RSA加密(8-19)。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

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

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