如何手动加密SOAP消息?

Zau*_*r_M 12 java security ws-security jboss web-services

我使用JBoss 4.2.3.GA. 在之前的任务中,我使用了JBoss支持的基本加密机制(WS-Security).即我使用密钥库,信任库文件进行加密和签名消息.通常(以标准方式)在jboss-wsse-*文件中定义了必须在加密过程中使用的密钥别名.我在Action book中使用了JBoss的ws安全配置.

没关系.加密工作正常.

但在我当前的任务中,我需要手动和动态地为键指定别名.任务描述:

  • 我有几个档案.在每个配置文件中,可以是必须用于加密消息的公钥的别名别名.

  • 我有密钥库包含服务器的私钥/公钥和客户端的公钥,它们将向服务器发送消息

  • 我需要使用此别名指定的公钥从配置文件获取别名并加密消息(在客户端).

  • 所以我需要以某种方式从密钥库加载数据(它必须驻留在文件系统文件夹,即外耳文件),从中获取适当的公钥,然后进行加密.
  • 之后,我需要向具有私钥进行解密的远程Web服务(服务器端)发送消息.
  • 在这里,我看到了服务器端逻辑的几种变体:Web服务使用标准JBoss机制进行解密,或者我可以手动加载密钥库数据并手动进行解密.

所以问题是关于:

  1. 有没有办法为JBoss指定文件系统目录来加载密钥库?
  2. 我可以为标准JBoss WSS机制指定加密别名,以允许jboss在crypt进程中使用此信息吗?
  3. 如果我必须进行手动加密/解密,那么如何将多个Java对象包装到WS消息中,然后使用必要的别名加密它以及如何手动将此消息发送到远程Web服务?

我只是不知道如何开始,使用什么框架,甚至有必要使用外部(非JBoss)框架...

Vug*_*skr 0

1&2:为 jboss 定义密钥库:

<jboss-ws-security xmlns="http://www.jboss.com/ws-security/config" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.jboss.com/ws-security/config 
http://www.jboss.com/ws-security/schema/jboss-ws-security_1_0.xsd">
  <key-store-file>WEB-INF/wsse.keystore</key-store-file>
  <key-store-password>jbossws</key-store-password>
  <trust-store-file>WEB-INF/wsse.truststore</trust-store-file>
 <trust-store-password>jbossws</trust-store-password>
  <config>
     <sign type="x509v3" alias="wsse"/>
     <requires>
        <signature/>
        </requires>
     </config>
</jboss-ws-security>
Run Code Online (Sandbox Code Playgroud)

3:此处描述的 axis2 的加密替换(以及手动)示例:http://www.javaranch.com/journal/2008/10/web-service-security-encryption-axis2.html