私は2つのWebアプリケーションを展開しています.1つはWebサービスを表し、もう1つはwsクライアントです。 SIGNINGとTIMESTAMPを使用すると、すべて正常に動作し、クライアントのスタンプメッセージ(私は彼がデフォルトの300秒のttlをオーバーライドしないと思います)、x509証明書でメッセージに署名してwsに送信します。一方、彼はメッセージを受け取り、自分のキーストア内のクライアントの信頼できる証明書に対するタイムスタンプと証明書/署名を評価することができます。spring-ws(wss4j)で暗号化/復号化を追加する適切な方法は何ですか?
私の設定に暗号化操作を追加すると問題が発生します。クライアントはメッセージを暗号化できるように見えますが、メッセージを復号化する際には意識されていないようです。彼はちょうどSO誰かがX509で再び、X509および暗号化して署名、タイムスタンプを達成するために、私は何をする必要があるかを説明することができます
[SaajSoapMessage {http://www.w3.org/2001/04/xmlenc#}EncryptedData]
には、エンドポイントのマッピングが存在しないことを認識し、
WebServiceTransportException: Not Found [404] exception.
をスローします?
サーバーアプリケーションコンテキストの一部:
<bean id="wss4jSecurityInterceptor" class="org.springframework.ws.soap.security.wss4j.Wss4jSecurityInterceptor">
<!-- valiadation -->
<property name="validationActions" value="Timestamp Signature Encrypt"/>
<property name="enableSignatureConfirmation" value="true"/>
<property name="validationSignatureCrypto">
<ref bean="keystore"/>
</property>
<property name="validationDecryptionCrypto">
<ref bean="keystore"/>
</property>
<property name="validationCallbackHandler">
<bean class="org.springframework.ws.soap.security.wss4j.callback.KeyStoreCallbackHandler">
<property name="privateKeyPassword" value="password"/>
</bean>
</property>
<!-- timestamp options -->
<property name="timestampStrict" value="true"/>
<property name="timeToLive" value="30"/>
<property name="timestampPrecisionInMilliseconds" value="true"/>
<!-- signing and encryption -->
<property name="securementActions" value="Timestamp Signature Encrypt"/>
<property name="securementUsername" value="wsserver"/>
<property name="securementPassword" value="password"/>
<property name="securementSignatureKeyIdentifier" value="DirectReference"/>
<property name="securementSignatureCrypto">
<ref bean="keystore"/>
</property>
<property name="securementEncryptionUser" value="wsclient"/>
<property name="securementEncryptionCrypto">
<ref bean="keystore"/>
</property>
</bean>
<!-- keystore -->
<bean id="keystore" class="org.springframework.ws.soap.security.wss4j.support.CryptoFactoryBean">
<property name="keyStorePassword" value="password"/>
<property name="keyStoreLocation" value="WEB-INF/MyTruststore.jks"/>
</bean>
<!-- interceptors -->
<sws:interceptors>
<ref bean="wss4jSecurityInterceptor"/>
<bean id="validatingInterceptor"
class="org.springframework.ws.soap.server.endpoint.interceptor.PayloadValidatingInterceptor">
<property name="schema" value="/WEB-INF/person.xsd"/>
<property name="validateRequest" value="true"/>
<property name="validateResponse" value="true"/>
</bean>
<bean id ="loggingInterceptor" class="org.springframework.ws.server.endpoint.interceptor.PayloadLoggingInterceptor">
</bean>
</sws:interceptors>
クライアントbasiclyが、彼は暗号化のために、サーバの公開鍵を使用すること以外は、同じ設定を使用し、暗号解読のための彼の秘密鍵。署名は、[OK]を動作するため
キーストアは、私は推測、大丈夫です...私は暗号化アクションを追加するときに崩壊してしまうjuustすべては、サーバログの一部は言う:
DEBUG [org.springframework.ws.server.MessageTracing.recei ved] - Received request [SaajSoapMessage {http://www.w3.org/2001/04/xmlenc#}EncryptedData] DEBUG [org.springframework.ws.server.endpoint.mapping.Pay loadRootAnnotationMethodEndpointMapping] - Looking up endpoint for [{http://www.w3.org/2001/04/xmlenc#}EncryptedData] DEBUG [org.springframework.ws.soap.server.SoapMessageDisp atcher] - Endpoint mapping [org.springframework.ws.server.endpoint.mapping.Pay [email protected]] has no mapping for request ... No endpoint mapping found for [SaajSoapMessage {http://www.w3.org/2001/04/xmlenc#}EncryptedData] org.springframework.ws.client.WebServiceTransportE xception: Not Found [404] ...
私は何とか解読するためにWSを指示する必要がありだと思いますSOAPボディはメッセージのエンドポイントを探す前に開始されますが、どうすればわかりません。提案?
私はこの問題を解決しました。 私は@PayloadRootアノテーションを使用していましたが、私のpayloadRootは決してアプリケーションがエンドポイントにマップできるものではありませんでした。ちょうどEncryptedDataでした。 annを@ SoapActionに変更し、WebServiceMessageCallback()インターフェイスをクライアントのmarshalSendAndReceive()に追加したとき、WebサービスはEncryptedDataペイロードのマッピングがないと考え、SoapActionAnnotationMethodEndpointMappingでマッピングを探して見つけました。 サーバが要求のためのマッピングを見つけたときだけ、SOAPボディを復号化して、PayloadRootがそこにあることを知りました:) – mare
質問を閉じてください! –
サーバーのアプリケーションコンテキストでは、どこで復号化と署名のためのキーエイリアスを指定していますか? – WarLord