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

Tomcat 使用安全证书使用SOAP Web服务-Java,tomcat,ssl,soap,encryption,soap-client,Tomcat,Ssl,Soap,Encryption,Soap Client,我一直在尝试使用一个使用X.509证书令牌配置文件的web服务。我正在使用Tomcat服务器,还生成了一个自签名证书,我已将其传递给服务器端的dudes。到目前为止,我还将他们的证书导入了我的密钥库。 一些在线资源建议只需将tomcat配置为使用SSL,然后它就会自动处理soap请求的签名和加密。我这样做没有任何成功,因为我在wireshark上看到的监视请求显示我的普通soap请求没有变化。 我还尝试以代码方式实现签名和加密,处理签名方面的问题,但由于XSS4J似乎不再在线存在,所以我放弃了这

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

1) 有人能给我解释一下如何生成这个密码值吗。我能利用什么?我的密钥对,服务器证书还是什么。我已粘贴包含以下密码值的部分:

<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>

Ab+xN46S1Q8A16YDXqHI/6YGQ78DS99OF9OMNDLDYTSLKBZIUHFTVXJ504DBGJPJAI1X5CO7IZH7XEZFOL6X7/pl95TZajb3oSRhPX4Zj/oSCuID89292JSDxfaWJ2+CaR33h782YDTSlW8A8tnrx2DH9I14=
2) 是否有更干净的方法允许导入证书和密钥库处理来自服务器的请求和响应的加密、签名和解密,而无需手动编写代码。如果有明确步骤的链接,我们将不胜感激

谢谢

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

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


/参考资料/css/jquery.dataTables.css

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

当我今年前尝试时,当然可以为它配置Tomcat。最后,我没有决定使用它,因为我无法验证Tomcat(或Glassfish)解决方案的安全性。我自己创造了一个解决方案(在上述论文发表之前,我在博客上写下了这个问题)。不幸的是,我无法共享为我工作的公司创建的代码。如果我没记错的话,Tomcat被打了补丁。你能给我们看看你的Tomcat配置吗?@owlstead谢谢。更新以显示tomcat配置。注:我刚刚尝试使用WSS4J的另一种方式。已经到了导入从我生成的密钥对的公钥导出的证书的地步。导入到JKS密钥库不会出现任何问题。尝试对PKCS12密钥库执行相同操作会导致KeyStoreException,抱怨TrustedCertEntry不受支持。即使我决定将包含证书的jks密钥库转换为PKCS12类型的密钥库,也会产生相同的异常。你能告诉我你是如何着手解决这个问题的吗?谢谢你不是把应用程序级安全和SSL混淆了吗?我可以在XML中看到xenc,在配置中看到TLS。。。这是不同级别的安全措施。@owlstead不,我不是。XML中的xenc是我使用SoapUI发送XML请求时使用wireshark查看流量时得到的请求的一部分。我粘贴了该XML以询问如何生成CipherValue,以便生成类似的CipherValue
<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>