﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-Good things in life are free!</title><link>http://www.blogjava.net/daniel-shen/</link><description /><language>zh-cn</language><lastBuildDate>Thu, 07 May 2026 05:17:26 GMT</lastBuildDate><pubDate>Thu, 07 May 2026 05:17:26 GMT</pubDate><ttl>60</ttl><item><title>通过Rampart将SOAP信息安全传输(按apache的user guide翻译，希望大家补充)</title><link>http://www.blogjava.net/daniel-shen/archive/2007/04/29/114629.html</link><dc:creator>小凡</dc:creator><author>小凡</author><pubDate>Sun, 29 Apr 2007 10:40:00 GMT</pubDate><guid>http://www.blogjava.net/daniel-shen/archive/2007/04/29/114629.html</guid><wfw:comment>http://www.blogjava.net/daniel-shen/comments/114629.html</wfw:comment><comments>http://www.blogjava.net/daniel-shen/archive/2007/04/29/114629.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/daniel-shen/comments/commentRss/114629.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/daniel-shen/services/trackbacks/114629.html</trackback:ping><description><![CDATA[&nbsp;
<p><span>通过</span><span>Rampart</span><span>将</span><span>SOAP</span><span>信息安全传输</span></p>
<p>&nbsp;</p>
<p><span>AXIS2</span><span>拥有一个基于</span><span>apache wss4j</span><span>提供</span><span>ws-security</span><span>的模块，叫</span><span>Rampart</span><span>。这篇文档提供了运行和配置</span><span>Rampart</span><span>模块的信息。</span></p>
<p>&nbsp;</p>
<p><span>介绍：</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>当</span><span>rampart</span><span>模块在系统指定的安全阶段插入了处理器之后，它是全局起作用的。这些处理器可以使用</span><span>ws-securitypolicy[2]</span><span>和</span><span>rempart</span><span>指定的策略来配置。</span><span>Rampart-1.0</span><span>使用两个</span><span>axis2</span><span>参数来配置，这种配置方法到了</span><span>1.1</span><span>还在使用。</span></p>
<p><span>Rampart1.1</span><span>：</span><span><a href="http://www.apache.org/dyn/closer.cgi/ws/rampart/1_1">http://www.apache.org/dyn/closer.cgi/ws/rampart/1_1</a></span></p>
<p><span>首先，需要将下面的语句插入到</span><span>axis2.xml</span><span>文件中</span></p>
<p><span>&lt;module ref=&#8221;rampart&#8221;/&gt;</span></p>
<p>&nbsp;</p>
<p><span>当</span><span>axis2</span><span>配置到服务器如</span><span>tomcat</span><span>时，可以使用</span><span>web</span><span>的管理接口。</span></p>
<p><span>在服务器，为每个服务提供安全是可能的。配置参数需要在</span><span>service.xml</span><span>文件中设定。</span></p>
<p><span>&nbsp;</span><span>在客户端配置参数需要在</span><span>client&#8217;s axis2 repository</span><span>的</span><span>axis2.xml</span><span>中设置。</span></p>
<p>&nbsp;</p>
<p><span>Rampart-1.1 </span><span>配置</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Rampart</span><span>指定的声明</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Rampart</span><span>使用标准的</span><span>ws-securitypolicy[2]</span><span>声明，也能定义自己的声明。</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Rampart</span><span>指定的声明</span><span>xsd</span><span>文档：</span><span><a href="http://ws.apache.org/axis2/modules/rampart/1_1/sec-conf/rampart-config.xsd">http://ws.apache.org/axis2/modules/rampart/1_1/sec-conf/rampart-config.xsd</a></span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Ramp</span><span>：</span><span>rampartconfig</span><span>必须作为顶层声明有效，如</span><span><a href="http://ws.apache.org/axis2/modules/rampart/1_1/sec-conf/sample-policy.xml">http://ws.apache.org/axis2/modules/rampart/1_1/sec-conf/sample-policy.xml</a></span></p>
<p align=left>&nbsp;</p>
<p align=left><span>服务端配置</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>需要在</span><span>services.xml</span><span>文件中增加</span><span>policy</span><span>元素来配置服务。一个可用的</span><span>service.xml</span><span>：</span></p>
<p align=left><span><a href="http://ws.apache.org/axis2/modules/rampart/1_1/sec-conf/sample-services.xml">http://ws.apache.org/axis2/modules/rampart/1_1/sec-conf/sample-services.xml</a></span></p>
<p align=left><span>客户端配置</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>在客户端，需要创建一个</span><span>policy</span><span>对象，将其载入</span><span>options.</span><span>创建</span><span>policy</span><span>对象能使用</span><span>policy.xml</span><span>文件，如下：</span></p>
<p align=left><span>//Creating the object</span></p>
<p align=left><span>&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>StAXOMBuilder builder = new StAXOMBuilder(pathToPolicyfile);</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Policy clientPolicy = PolicyEngine.getPolicy(builder.getDocumentElement());</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//setting the object</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Options options = new Options();</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>options.setProperty(RampartMessageData.KEY_RAMPART_POLICY, clientPolicy);</span></p>
<p align=left>&nbsp;</p>
<p align=left><span>rampart-1.0</span><span>配置</span></p>
<p align=left><span>rampart</span><span>模块使用两个参数：</span><span>outflowsecurity</span><span>和</span><span>inflowsecurity</span></p>
<p align=left><span>OutflowSecurity</span><span>参数：</span></p>
<p align=left><span>这个参数是用来配置</span><span>outflow</span><span>安全处理器的。</span><span>Outflow</span><span>处理器能在一个</span><span>outflow</span><span>（</span><span>one can provde configuration for each of these invocations</span><span>）中调用多次</span><span>.&#8221;action&#8221;</span><span>描述了一种这样的配置。因此</span><span>&#8221;outflowsecurity&#8221;</span><span>参数能包含多个</span><span>&#8217;action&#8217;</span><span>元素。</span><span>&#8217;action&#8217;</span><span>元素的</span><span>schema</span><span>：</span><span><a href="http://ws.apache.org/axis2/modules/rampart/1_1/sec-conf/out-action.xsd">http://ws.apache.org/axis2/modules/rampart/1_1/sec-conf/out-action.xsd</a></span></p>
<p align=left><span>给</span><span>outflow</span><span>配置增加一个时间戳，</span><span><a href="http://ws.apache.org/axis2/modules/rampart/1_1/security-module.html#ex1">http://ws.apache.org/axis2/modules/rampart/1_1/security-module.html#ex1</a></span><span>是给信息签字和加密的例子，</span><span><a href="http://ws.apache.org/axis2/modules/rampart/1_1/security-module.html#ex1">http://ws.apache.org/axis2/modules/rampart/1_1/security-module.html#ex1</a> </span><span>演示了如何通过连锁</span><span>outflow</span><span>处理器将信息签名两次（使用两个&#8216;</span><span>action</span><span>&#8217;元素）</span></p>
<p align=left><span>下面是</span><span>outflowsecurity </span><span>参数能放在</span><span>&#8217;action&#8217;</span><span>元素里面的元素描述</span></p>
<table cellPadding=0 width="100%" border=0>
    <tbody>
        <tr>
            <td vAlign=top>
            <p align=left><strong><span>Parameter</span></strong></p>
            </td>
            <td vAlign=top>
            <p align=left><strong><span>Description</span></strong></p>
            </td>
            <td vAlign=top>
            <p align=left><strong><span>Example</span></strong></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top>
            <p align=left><span>items</span></p>
            </td>
            <td vAlign=top>
            <p align=left><span>Security actions for the inflow</span></p>
            </td>
            <td vAlign=top>
            <p align=left><span>Add a Timestamp, Sign the SOAP body and Encrypt the SOAP body <br><br>&lt;items&gt; Timestamp Signature Encrypt&lt;/items&gt;</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top>
            <p align=left><span>user</span></p>
            </td>
            <td vAlign=top>
            <p align=left><span>The user's name</span></p>
            </td>
            <td vAlign=top>
            <p align=left><span>Set alias of the key to be used to sign<br><br>&lt;user&gt; bob&lt;/user&gt;</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top>
            <p align=left><span>passwordCallbackClass</span></p>
            </td>
            <td vAlign=top>
            <p align=left><span>Callback class used to provide the password required to create the UsernameToken or to sign the message</span></p>
            </td>
            <td vAlign=top>
            <p align=left><span>&lt;passwordCallbackClass&gt; org.apache.axis2.security.PWCallback&lt;/passwordCallbackClass&gt;</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top>
            <p align=left><span>signaturePropFile</span></p>
            </td>
            <td vAlign=top>
            <p align=left><span>property file used to get the signature parameters such as crypto provider, keystore and its password</span></p>
            </td>
            <td vAlign=top>
            <p align=left><span>Set example.properties file as the signature property file<br><br>&lt;signaturePropFile&gt; example.properties&lt;/signaturePropFile&gt;</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top>
            <p align=left><span>signatureKeyIdentifier</span></p>
            </td>
            <td vAlign=top>
            <p align=left><span>Key identifier to be used in referring the key in the signature</span></p>
            </td>
            <td vAlign=top>
            <p align=left><span>Use the serial number of the certificate<br><br>&lt;signatureKeyIdentifier&gt; IssuerSerial&lt;/signatureKeyIdentifier&gt;</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top>
            <p align=left><span>encryptionKeyIdentifier</span></p>
            </td>
            <td vAlign=top>
            <p align=left><span>Key identifier to be used in referring the key in encryption</span></p>
            </td>
            <td vAlign=top>
            <p align=left><span>Use the serial number of the certificate <br><br>&lt;encryptionKeyIdentifier&gt;IssuerSerial&lt;/encryptionKeyIdentifier&gt;</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top>
            <p align=left><span>encryptionUser</span></p>
            </td>
            <td vAlign=top>
            <p align=left><span>The user's name for encryption.</span></p>
            </td>
            <td vAlign=top>
            <p align=left><span><br><br>&lt;encryptionUser&gt;<st1:city w:st="on"><st1:place w:st="on">alice</st1:place></st1:city>&lt;/encryptionUser&gt;</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top>
            <p align=left><span>encryptionSymAlgorithm</span></p>
            </td>
            <td vAlign=top>
            <p align=left><span>Symmetric algorithm to be used for encryption</span></p>
            </td>
            <td vAlign=top>
            <p align=left><span>Use AES-128<br><br>&lt;encryptionSymAlgorithm&gt; http://www.w3.org/2001/04/xmlenc#aes128-cbc&lt;/encryptionSymAlgorithm&gt;</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top>
            <p align=left><span>encryptionKeyTransportAlgorithm</span></p>
            </td>
            <td vAlign=top>
            <p align=left><span>Key encryption algorithm</span></p>
            </td>
            <td vAlign=top>
            <p align=left><span>Use RSA-OAEP<br><br>&lt;parameter name="encryptionSymAlgorithm"&gt; http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p&lt;/parameter&gt;</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top>
            <p align=left><span>signatureParts</span></p>
            </td>
            <td vAlign=top>
            <p align=left><span>Sign multiple parts in the SOAP message</span></p>
            </td>
            <td vAlign=top>
            <p align=left><span>Sign Foo and Bar elements qualified by "http://app.ns/ns"<br><br>&lt;signatureParts&gt; {Element}{http://app.ns/ns}Foo;{Element}{http://app.ns/ns}Bar &lt;/signatureParts&gt;</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top>
            <p align=left><span>optimizeParts</span></p>
            </td>
            <td vAlign=top>
            <p align=left><span>MTOM Optimize the elements specified by the XPath query</span></p>
            </td>
            <td vAlign=top>
            <p align=left><span>Optimize the CipherValue<br><br>&lt;optimizeParts&gt; //xenc:EncryptedData/xenc:CipherData/xenc:CipherValue &lt;/optimizeParts&gt;</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p align=left>&nbsp;</p>
<p align=left><span>InflowSecurity </span><span>参数</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>这个参数是来配置</span><span>inflow </span><span>安全处理器的。</span><span>&#8217;action&#8217;</span><span>也被使用来对配置元素进行封装。</span><span><a href="http://ws.apache.org/axis2/modules/rampart/1_1/security-module.html#ex3">http://ws.apache.org/axis2/modules/rampart/1_1/security-module.html#ex3</a> </span><span>展示了配置说明，校验签名和验证时间戳。</span></p>
<table cellPadding=0 width="100%" border=0>
    <tbody>
        <tr>
            <td vAlign=top>
            <p align=left><strong><span>Parameter</span></strong></p>
            </td>
            <td vAlign=top>
            <p align=left><strong><span>Description</span></strong></p>
            </td>
            <td vAlign=top>
            <p align=left><strong><span>Example</span></strong></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top>
            <p align=left><span>items</span></p>
            </td>
            <td vAlign=top>
            <p align=left><span>Security actions for the inflow</span></p>
            </td>
            <td vAlign=top>
            <p align=left><span>first the incoming message should be decrypted and then the signatures should be verified and should be checked for the availability of the Timestamp <br><br>&lt;items&gt; Timestamp Signature Encrypt&lt;/items&gt;</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top>
            <p align=left><span>passwordCallbackClass</span></p>
            </td>
            <td vAlign=top>
            <p align=left><span>Callback class used to obtain password for decryption and UsernameToken verification</span></p>
            </td>
            <td vAlign=top>
            <p align=left><span><br><br>&lt;passwordCallbackClass&gt; org.apache.axis2.security.PWCallback&lt;/passwordCallbackClass&gt;</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top>
            <p align=left><span>signaturePropFile</span></p>
            </td>
            <td vAlign=top>
            <p align=left><span>Property file used for signature verification</span></p>
            </td>
            <td vAlign=top>
            <p align=left><span><br><br>&lt;signaturePropFile&gt; sig.properties&lt;/signaturePropFile&gt;</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top>
            <p align=left><span>decryptionPropFile</span></p>
            </td>
            <td vAlign=top>
            <p align=left><span>Property file used for decryption</span></p>
            </td>
            <td vAlign=top>
            <p align=left><span><br><br>&lt;decryptionPropFile&gt; dec.properties&lt;/decryptionPropFile&gt;</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p align=left>&nbsp;</p>
<p align=left>&nbsp;</p>
<p align=left><span>请注意</span><span>&#8217;.properties&#8217;</span><span>文件在</span><span>properties</span><span>中被使用，如</span><span>outsignaturepropfile&nbsp;</span><span>和在</span><span>wss4j</span><span>项目中用到的属性文件是一样的。下面展示了如何在属性文件中定义属性。</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span></span><span>org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>org.apache.ws.security.crypto.merlin.keystore.type=pkcs12</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>org.apache.ws.security.crypto.merlin.keystore.password=security</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>org.apache.ws.security.crypto.merlin.keystore.alias=<st1:chmetcnv w:st="on" UnitName="C" SourceValue="16" HasSpace="False" Negative="False" NumberType="1" TCSC="0">16c</st1:chmetcnv>73ab6-b892<st1:chmetcnv w:st="on" UnitName="F" SourceValue="458" HasSpace="False" Negative="True" NumberType="1" TCSC="0">-458f</st1:chmetcnv>-abf5<st1:chmetcnv w:st="on" UnitName="F" SourceValue="2" HasSpace="False" Negative="True" NumberType="1" TCSC="0">-2f</st1:chmetcnv><st1:chmetcnv w:st="on" UnitName="F" SourceValue="875" HasSpace="False" Negative="False" NumberType="1" TCSC="0">875f</st1:chmetcnv>74882e</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>org.apache.ws.security.crypto.merlin.alias.password=security</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>org.apache.ws.security.crypto.merlin.file=keys/x509.PFX.MSFT</span></p>
<p align=left>&nbsp;</p>
<p><span>org.apache.ws.security.crypto.provider defines the implementation of the org.apache.ws.security.components.crypto.Crypto interface to provide the crypto information required by WSS4J. The other properties defined are the configuration properties used by the implementation class (org.apache.ws.security.components.crypto.Merlin). <a name=ref></a><a name=references></a></span></p>
<p align=left>&nbsp;</p>
<img src ="http://www.blogjava.net/daniel-shen/aggbug/114629.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/daniel-shen/" target="_blank">小凡</a> 2007-04-29 18:40 <a href="http://www.blogjava.net/daniel-shen/archive/2007/04/29/114629.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>