Biri web hizmetini ve diğer ws istemcisini temsil eden 2 web uygulaması dağıttım. SIGNING ve TIMESTAMP-ing kullanırken, her şey iyi çalışıyor, istemci pulları mesajı (ama varsayılan 300s ttl'yi geçersiz kılmadığını düşünüyorum), mesajı x509 sertifikayla imzalar ve ws'ye gönderir. Öte yandan, mesaj verir ve müşterinin anahtar deposundaki güvenilir sertifikasına karşı zaman damgasını ve sertifika/imzayı doğrulayabilir.İlkbaharda (wss4j) şifreleme/şifre çözme eklemenin doğru yolu nedir?
Yapılandırmam için Şifreleme işlemini eklediğimde sorun çıkıyor. İstemci mesajı şifreleyebiliyor gibi görünüyor, ancak mesajın şifresini çözmede ws gibi gözükmüyor. O sadece
[SaajSoapMessage {http://www.w3.org/2001/04/xmlenc#}EncryptedData]
için bir bitiş noktası eşleme olduğunu görür ve
WebServiceTransportException: Not Found [404] exception.SO birisi ben x509 ile yine x509 ve şifreleme ile imzalanması, Timestamping ulaşmak için yapmanız gereken açıklayabilir atar ?
sunucu app-bağlamın parçası:
<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>
Müşteri temel olarak, o şifreleme için sunucu genel anahtarı kullanır haricinde, aynı yapılandırma kullanır ve şifre çözme için yaptığı özel anahtar. İmza Tamam çalıştığı için
anahtar depolarını, sanırım, Tamam ... ben Şifrele eylemi eklediğinizde yıkılır juust Her şey sunucusu günlüğünün parçası diyor ki:
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] ...
Ben bir şekilde çözmek için ws talimat gerektiğini düşünüyorum SOAP gövdesi daha önce mesaj için bir son nokta aramaya başlar, fakat nasıl olduğunu bilmiyorum. Öneriler?
için yapılan soruna neden oldu, iyi, kinda. Buradaki şey, @PayloadRoot ek açıklamasını kullanmamdı, ancak benim payloadRoot, hiçbir zaman uygulamamın bir uç noktaya eşlenebileceği bir şey değildi .. sadece EncryptedData idi. Ann'i @ SoapAction olarak değiştirdim ve WebServiceMessageCallback() arabirimini istemcinin marshalSendAndReceive() öğesine eklediğimde, web hizmeti EncryptedData veri yükü için eşleme olmadığını düşündü, bu yüzden SoapActionAnnotationMethodEndpointMapping ile eşleşme aradı ve bir tane buldu. Sunucu, yalnızca istek için eşleme bulduğunda, SOAP gövdesinin şifresini çözdü ve PayloadRoot'un orada bulunduğunu öğrendim :) – mare
Lütfen soruyu kapatın! –
Sunucu uygulama bağlamında, şifre çözme ve imza için anahtar diğer adı nerede belirliyorsunuz? – WarLord