使用安全证书来使用SOAP Web服务 - Java

时间:2014-10-04 14:13:05

标签: tomcat ssl soap encryption soap-client

我一直试图使用一个使用X.509证书令牌配置文件的Web服务。我正在使用Tomcat服务器,还生成了一个自签名证书,我已经将其传递给服务器端的人。到目前为止,我还将他们的证书导入了我的密钥库。 在线建议的一些资源只是简单地配置tomcat以使用SSL,然后它会自动处理soap请求的签名和加密。我没有成功就完成了,因为我在wireshark监控中看到的请求显示我的普通肥皂请求没有变化。 我还尝试以代码方式实现签名和加密,处理签名方面,但由于XSS4J似乎不再在线存在而加入了加密,所以我放弃了这条路线。 我还尝试使用SoapUI发送普通请求,在SoapUI中导入密钥并成功发送。我使用wireshark获得了签名和加密的请求,并尝试将我的普通请求转换为我从成功的SoapUI中看到的加密和签名消息。我再次陷入困境,试图在请求的标题部分生成CipherValue。

1)任何人都可以向我解释如何生成这个cipherValue。我该怎么用?我的密钥对,服务器证书还是什么。我已粘贴下面包含CipherValue的部分:

<xenc:EncryptedKey
                    Id="EK-D9EDC0ED19F6FBF32C1412176047017170"
                    xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
                    <xenc:EncryptionMethod
                        Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
                    <ds:KeyInfo
                        xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
                        <wsse:SecurityTokenReference>
                            <wsse:Reference
                                URI="#D9EDC0ED19F6FBF32C1412176047017171"
                                ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/>
                            </wsse:SecurityTokenReference>
                        </ds:KeyInfo>
                    <xenc:CipherData>
                        <xenc:CipherValue>
                            Ab+xN46S1Q8A16YDXqHI/6ygQ78DS99OF9OMndldyTSLkBziUhFtvxJ504DbGJpvJAI1X5co7izH7xezFOL6x7/pl95TZajb3oSRhPX4Zj/oSCuID89292JSDxfaWJ2+CaR33h782YDTSlW8A8tnrx2DH9I14=
                            </xenc:CipherValue>
                        </xenc:CipherData>
                    <xenc:ReferenceList>
                        <xenc:DataReference
                            URI="#ED-108"/>
                        </xenc:ReferenceList>
                    </xenc:EncryptedKey>

2)是否有更简洁的方法允许导入证书,我的密钥库处理来自服务器的请求和响应的加密,签名和解密,而无需手动编码。希望任何带有明确步骤的链接

由于

更新:我正在使用的tomcat的Server.xml:

<?xml version="1.0" encoding="UTF-8"?>

              

       

<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8782" protocol="HTTP/1.1" redirectPort="8443"/>
<Connector URIEncoding="UTF-8" maxConnections="500" maxThreads="500" port="8709" protocol="AJP/1.3" redirectPort="8443"/>

<Connector SSLEnabled="true" acceptCount="100" clientAuth="false" disableUploadTimeout="true" enableLookups="false" maxThreads="150" port="8443" keystoreFile="c:\jcodes\certs\server.keystore" keystorePass="abcd1234" protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https" secure="true" sslProtocol="TLS"/>


<Engine defaultHost="localhost" name="Catalina">
  <Realm className="org.apache.catalina.realm.LockOutRealm">
    <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
  </Realm>

  <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log." suffix=".txt"/>
    <Context path="/resources" reloadable="true">
        <WatchedResource>/resources/css/jquery.dataTables.css</WatchedResource>
    </Context>
  </Host>
</Engine>

更新:已解决 最后通过使用WSS4J解决了这个问题。使用SOAPUI和Wireshark获取了示例请求,然后继续使用WSS4J对SOAP请求进行签名和加密。

0 个答案:

没有答案