Author: coheigea
Date: Tue Aug 20 10:56:47 2013
New Revision: 1515771
URL: http://svn.apache.org/r1515771
Log:
Add support for encrypted passwords in WS-Security Crypto property files
Added:
cxf/trunk/systests/ws-security/src/test/resources/alice-enc.properties
cxf/trunk/systests/ws-security/src/test/resources/bob-enc.properties
Modified:
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/SecurityConstants.java
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/AbstractWSS4JInterceptor.java
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/AbstractWSS4JStaxInterceptor.java
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/PolicyBasedWSS4JInInterceptor.java
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/PolicyBasedWSS4JStaxInInterceptor.java
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/PolicyBasedWSS4JStaxOutInterceptor.java
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JInInterceptor.java
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JStaxInInterceptor.java
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AbstractBindingBuilder.java
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/action/ActionTest.java
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/common/KeystorePasswordCallback.java
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/x509/StaxX509TokenTest.java
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/x509/X509TokenTest.java
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/action/DoubleItAction.wsdl
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/action/client.xml
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/action/server.xml
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/DoubleItX509.wsdl
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/client.xml
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/server.xml
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/stax-server.xml
Modified:
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/SecurityConstants.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/SecurityConstants.java?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
---
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/SecurityConstants.java
(original)
+++
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/SecurityConstants.java
Tue Aug 20 10:56:47 2013
@@ -312,6 +312,20 @@ public final class SecurityConstants {
public static final String ASYMMETRIC_SIGNATURE_ALGORITHM =
"ws-security.asymmetric.signature.algorithm";
+ /**
+ * This holds a reference to a PasswordEncryptor instance, which is used
to encrypt or
+ * decrypt passwords in the Merlin Crypto implementation (or any custom
Crypto implementations).
+ *
+ * By default, WSS4J uses the StrongJasyptPasswordEncryptor, which must be
instantiated with a
+ * master password to use to decrypt keystore passwords in the Merlin
Crypto properties file.
+ * This master password is obtained via the CallbackHandler defined via
PW_CALLBACK_CLASS
+ * or PW_CALLBACK_REF.
+ *
+ * The encrypted passwords must be stored in the format "ENC(encoded
encrypted password)".
+ */
+ public static final String PASSWORD_ENCRYPTOR_INSTANCE =
+ "ws-security.password.encryptor.instance";
+
//
// Validator implementations for validating received security tokens
//
@@ -495,7 +509,7 @@ public final class SecurityConstants {
DISABLE_STS_CLIENT_WSMEX_CALL_USING_EPR_ADDRESS, STS_TOKEN_CRYPTO,
STS_TOKEN_PROPERTIES, STS_TOKEN_USERNAME, STS_TOKEN_ACT_AS,
STS_TOKEN_ON_BEHALF_OF,
TOKEN, TOKEN_ID, SUBJECT_ROLE_CLASSIFIER,
SUBJECT_ROLE_CLASSIFIER_TYPE, MUST_UNDERSTAND,
- ASYMMETRIC_SIGNATURE_ALGORITHM
+ ASYMMETRIC_SIGNATURE_ALGORITHM, PASSWORD_ENCRYPTOR_INSTANCE
}));
ALL_PROPERTIES = Collections.unmodifiableSet(s);
}
Modified:
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/AbstractWSS4JInterceptor.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/AbstractWSS4JInterceptor.java?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
---
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/AbstractWSS4JInterceptor.java
(original)
+++
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/AbstractWSS4JInterceptor.java
Tue Aug 20 10:56:47 2013
@@ -40,8 +40,10 @@ import org.apache.cxf.message.MessageUti
import org.apache.cxf.phase.PhaseInterceptor;
import org.apache.cxf.resource.ResourceManager;
import org.apache.cxf.ws.security.SecurityConstants;
+import org.apache.wss4j.common.ConfigurationConstants;
import org.apache.wss4j.common.crypto.Crypto;
import org.apache.wss4j.common.crypto.CryptoFactory;
+import org.apache.wss4j.common.crypto.PasswordEncryptor;
import org.apache.wss4j.common.ext.WSSecurityException;
import org.apache.wss4j.dom.WSConstants;
import org.apache.wss4j.dom.handler.RequestData;
@@ -200,6 +202,12 @@ public abstract class AbstractWSS4JInter
WSHandlerConstants.VALIDATE_SAML_SUBJECT_CONFIRMATION,
Boolean.toString(validateSAMLSubjectConf)
);
+
+ PasswordEncryptor passwordEncryptor =
+
(PasswordEncryptor)msg.getContextualProperty(SecurityConstants.PASSWORD_ENCRYPTOR_INSTANCE);
+ if (passwordEncryptor != null) {
+
msg.setContextualProperty(ConfigurationConstants.PASSWORD_ENCRYPTOR_INSTANCE,
passwordEncryptor);
+ }
}
@Override
@@ -226,7 +234,8 @@ public abstract class AbstractWSS4JInter
props.load(in);
in.close();
return CryptoFactory.getInstance(props,
-
this.getClassLoader(reqData.getMsgContext()));
+
this.getClassLoader(reqData.getMsgContext()),
+
getPasswordEncryptor(reqData));
}
} catch (Exception e) {
//ignore
Modified:
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/AbstractWSS4JStaxInterceptor.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/AbstractWSS4JStaxInterceptor.java?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
---
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/AbstractWSS4JStaxInterceptor.java
(original)
+++
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/AbstractWSS4JStaxInterceptor.java
Tue Aug 20 10:56:47 2013
@@ -57,6 +57,8 @@ import org.apache.cxf.ws.security.tokens
import org.apache.wss4j.common.ConfigurationConstants;
import org.apache.wss4j.common.crypto.Crypto;
import org.apache.wss4j.common.crypto.CryptoFactory;
+import org.apache.wss4j.common.crypto.PasswordEncryptor;
+import org.apache.wss4j.common.crypto.StrongJasyptPasswordEncryptor;
import org.apache.wss4j.common.ext.WSPasswordCallback;
import org.apache.wss4j.common.ext.WSSecurityException;
import org.apache.wss4j.common.util.Loader;
@@ -176,6 +178,12 @@ public abstract class AbstractWSS4JStaxI
if (properties != null) {
properties.put(ConfigurationConstants.MUST_UNDERSTAND,
Boolean.toString(mustUnderstand));
}
+
+ PasswordEncryptor passwordEncryptor =
+
(PasswordEncryptor)msg.getContextualProperty(SecurityConstants.PASSWORD_ENCRYPTOR_INSTANCE);
+ if (passwordEncryptor != null && securityProperties == null) {
+ properties.put(ConfigurationConstants.PASSWORD_ENCRYPTOR_INSTANCE,
passwordEncryptor);
+ }
}
private Collection<Pattern> convertCertConstraints(String
certConstraints) {
@@ -369,7 +377,9 @@ public abstract class AbstractWSS4JStaxI
if (crypto == null) {
Object obj = getProperty(soapMessage, refId);
if (obj instanceof Properties) {
- crypto = CryptoFactory.getInstance((Properties)obj);
+ crypto = CryptoFactory.getInstance((Properties)obj,
+ getClassLoader(),
+
getPasswordEncryptor(soapMessage));
cryptos.put(refId, crypto);
} else if (obj instanceof Crypto) {
crypto = (Crypto)obj;
@@ -427,7 +437,8 @@ public abstract class AbstractWSS4JStaxI
InputStream in = url.openStream();
props.load(in);
in.close();
- return CryptoFactory.getInstance(props, getClassLoader());
+ return CryptoFactory.getInstance(props, getClassLoader(),
+
getPasswordEncryptor(soapMessage));
}
} catch (Exception e) {
//ignore
@@ -440,6 +451,28 @@ public abstract class AbstractWSS4JStaxI
}
}
+ protected PasswordEncryptor getPasswordEncryptor(SoapMessage soapMessage) {
+ PasswordEncryptor passwordEncryptor =
+ (PasswordEncryptor)soapMessage.getContextualProperty(
+ SecurityConstants.PASSWORD_ENCRYPTOR_INSTANCE
+ );
+ if (passwordEncryptor != null) {
+ return passwordEncryptor;
+ }
+
+ CallbackHandler callbackHandler = null;
+ if (securityProperties != null) {
+ callbackHandler = securityProperties.getCallbackHandler();
+ } else {
+ callbackHandler =
(CallbackHandler)getProperties().get(ConfigurationConstants.PW_CALLBACK_REF);
+ }
+ if (callbackHandler != null) {
+ return new StrongJasyptPasswordEncryptor(callbackHandler);
+ }
+
+ return null;
+ }
+
private ClassLoader getClassLoader() {
try {
return Loader.getTCL();
Modified:
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/PolicyBasedWSS4JInInterceptor.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/PolicyBasedWSS4JInInterceptor.java?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
---
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/PolicyBasedWSS4JInInterceptor.java
(original)
+++
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/PolicyBasedWSS4JInInterceptor.java
Tue Aug 20 10:56:47 2013
@@ -32,6 +32,7 @@ import java.util.Map;
import java.util.Properties;
import java.util.logging.Logger;
+import javax.security.auth.callback.CallbackHandler;
import javax.xml.namespace.QName;
import javax.xml.soap.SOAPException;
import javax.xml.stream.XMLStreamException;
@@ -81,7 +82,10 @@ import org.apache.cxf.ws.security.wss4j.
import
org.apache.cxf.ws.security.wss4j.policyvalidators.X509TokenPolicyValidator;
import org.apache.wss4j.common.crypto.Crypto;
import org.apache.wss4j.common.crypto.CryptoFactory;
+import org.apache.wss4j.common.crypto.PasswordEncryptor;
+import org.apache.wss4j.common.crypto.StrongJasyptPasswordEncryptor;
import org.apache.wss4j.common.ext.WSSecurityException;
+import org.apache.wss4j.common.util.Loader;
import org.apache.wss4j.dom.WSConstants;
import org.apache.wss4j.dom.WSDataRef;
import org.apache.wss4j.dom.WSSecurityEngineResult;
@@ -236,7 +240,7 @@ public class PolicyBasedWSS4JInIntercept
}
private String checkAsymmetricBinding(
- AssertionInfoMap aim, String action, SoapMessage message
+ AssertionInfoMap aim, String action, SoapMessage message, RequestData
data
) throws WSSecurityException {
Collection<AssertionInfo> ais =
getAllAssertionsByLocalname(aim, SPConstants.ASYMMETRIC_BINDING);
@@ -255,12 +259,12 @@ public class PolicyBasedWSS4JInIntercept
e =
message.getContextualProperty(SecurityConstants.ENCRYPT_PROPERTIES);
}
- Crypto encrCrypto = getEncryptionCrypto(e, message);
+ Crypto encrCrypto = getEncryptionCrypto(e, message, data);
Crypto signCrypto = null;
if (e != null && e.equals(s)) {
signCrypto = encrCrypto;
} else {
- signCrypto = getSignatureCrypto(s, message);
+ signCrypto = getSignatureCrypto(s, message, data);
}
if (signCrypto != null) {
@@ -280,7 +284,7 @@ public class PolicyBasedWSS4JInIntercept
}
private String checkDefaultBinding(
- AssertionInfoMap aim, String action, SoapMessage message
+ AssertionInfoMap aim, String action, SoapMessage message, RequestData
data
) throws WSSecurityException {
action = addToAction(action, "Signature", true);
action = addToAction(action, "Encrypt", true);
@@ -293,12 +297,12 @@ public class PolicyBasedWSS4JInIntercept
e =
message.getContextualProperty(SecurityConstants.ENCRYPT_PROPERTIES);
}
- Crypto encrCrypto = getEncryptionCrypto(e, message);
+ Crypto encrCrypto = getEncryptionCrypto(e, message, data);
Crypto signCrypto = null;
if (e != null && e.equals(s)) {
signCrypto = encrCrypto;
} else {
- signCrypto = getSignatureCrypto(s, message);
+ signCrypto = getSignatureCrypto(s, message, data);
}
if (signCrypto != null) {
@@ -334,7 +338,7 @@ public class PolicyBasedWSS4JInIntercept
}
private String checkSymmetricBinding(
- AssertionInfoMap aim, String action, SoapMessage message
+ AssertionInfoMap aim, String action, SoapMessage message, RequestData
data
) throws WSSecurityException {
Collection<AssertionInfo> ais =
getAllAssertionsByLocalname(aim, SPConstants.SYMMETRIC_BINDING);
@@ -353,12 +357,12 @@ public class PolicyBasedWSS4JInIntercept
e =
message.getContextualProperty(SecurityConstants.ENCRYPT_PROPERTIES);
}
- Crypto encrCrypto = getEncryptionCrypto(e, message);
+ Crypto encrCrypto = getEncryptionCrypto(e, message, data);
Crypto signCrypto = null;
if (e != null && e.equals(s)) {
signCrypto = encrCrypto;
} else {
- signCrypto = getSignatureCrypto(s, message);
+ signCrypto = getSignatureCrypto(s, message, data);
}
if (isRequestor(message)) {
@@ -402,7 +406,9 @@ public class PolicyBasedWSS4JInIntercept
return action;
}
- private Crypto getEncryptionCrypto(Object e, SoapMessage message) throws
WSSecurityException {
+ private Crypto getEncryptionCrypto(Object e,
+ SoapMessage message,
+ RequestData requestData) throws
WSSecurityException {
Crypto encrCrypto = null;
if (e instanceof Crypto) {
encrCrypto = (Crypto)e;
@@ -415,7 +421,9 @@ public class PolicyBasedWSS4JInIntercept
throw new
WSSecurityException(WSSecurityException.ErrorCode.FAILURE, ex);
}
- encrCrypto = CryptoFactory.getInstance(props);
+ PasswordEncryptor passwordEncryptor =
getPasswordEncryptor(message, requestData);
+ encrCrypto = CryptoFactory.getInstance(props,
Loader.getClassLoader(CryptoFactory.class),
+ passwordEncryptor);
EndpointInfo info =
message.getExchange().get(Endpoint.class).getEndpointInfo();
synchronized (info) {
@@ -425,7 +433,29 @@ public class PolicyBasedWSS4JInIntercept
return encrCrypto;
}
- private Crypto getSignatureCrypto(Object s, SoapMessage message) throws
WSSecurityException {
+ private PasswordEncryptor getPasswordEncryptor(SoapMessage soapMessage,
RequestData requestData) {
+ PasswordEncryptor passwordEncryptor =
+ (PasswordEncryptor)soapMessage.getContextualProperty(
+ SecurityConstants.PASSWORD_ENCRYPTOR_INSTANCE
+ );
+ if (passwordEncryptor != null) {
+ return passwordEncryptor;
+ }
+
+ if (requestData.getPasswordEncryptor() != null) {
+ return requestData.getPasswordEncryptor();
+ }
+
+ CallbackHandler callbackHandler = requestData.getCallbackHandler();
+ if (callbackHandler != null) {
+ return new StrongJasyptPasswordEncryptor(callbackHandler);
+ }
+
+ return null;
+ }
+
+ private Crypto getSignatureCrypto(Object s, SoapMessage message,
+ RequestData requestData) throws
WSSecurityException {
Crypto signCrypto = null;
if (s instanceof Crypto) {
signCrypto = (Crypto)s;
@@ -438,7 +468,9 @@ public class PolicyBasedWSS4JInIntercept
throw new
WSSecurityException(WSSecurityException.ErrorCode.FAILURE, ex);
}
- signCrypto = CryptoFactory.getInstance(props);
+ PasswordEncryptor passwordEncryptor =
getPasswordEncryptor(message, requestData);
+ signCrypto = CryptoFactory.getInstance(props,
Loader.getClassLoader(CryptoFactory.class),
+ passwordEncryptor);
EndpointInfo info =
message.getExchange().get(Endpoint.class).getEndpointInfo();
synchronized (info) {
@@ -560,11 +592,11 @@ public class PolicyBasedWSS4JInIntercept
if (aim != null) {
//things that DO impact setup
handleWSS11(aim, message);
- action = checkAsymmetricBinding(aim, action, message);
- action = checkSymmetricBinding(aim, action, message);
+ action = checkAsymmetricBinding(aim, action, message, data);
+ action = checkSymmetricBinding(aim, action, message, data);
Collection<AssertionInfo> ais =
aim.get(SP12Constants.TRANSPORT_BINDING);
if ("".equals(action) || (ais != null && !ais.isEmpty())) {
- action = checkDefaultBinding(aim, action, message);
+ action = checkDefaultBinding(aim, action, message, data);
}
// Allow for setting non-standard asymmetric signature algorithms
Modified:
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/PolicyBasedWSS4JStaxInInterceptor.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/PolicyBasedWSS4JStaxInInterceptor.java?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
---
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/PolicyBasedWSS4JStaxInInterceptor.java
(original)
+++
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/PolicyBasedWSS4JStaxInInterceptor.java
Tue Aug 20 10:56:47 2013
@@ -57,6 +57,7 @@ import org.apache.cxf.ws.security.Securi
import org.apache.wss4j.common.crypto.Crypto;
import org.apache.wss4j.common.crypto.CryptoFactory;
import org.apache.wss4j.common.ext.WSSecurityException;
+import org.apache.wss4j.common.util.Loader;
import org.apache.wss4j.dom.handler.WSHandlerConstants;
import org.apache.wss4j.policy.SP11Constants;
import org.apache.wss4j.policy.SP12Constants;
@@ -345,7 +346,9 @@ public class PolicyBasedWSS4JStaxInInter
throw new
WSSecurityException(WSSecurityException.ErrorCode.FAILURE, ex);
}
- encrCrypto = CryptoFactory.getInstance(props);
+ encrCrypto = CryptoFactory.getInstance(props,
+
Loader.getClassLoader(CryptoFactory.class),
+
getPasswordEncryptor(message));
EndpointInfo info =
message.getExchange().get(Endpoint.class).getEndpointInfo();
synchronized (info) {
@@ -368,7 +371,9 @@ public class PolicyBasedWSS4JStaxInInter
throw new
WSSecurityException(WSSecurityException.ErrorCode.FAILURE, ex);
}
- signCrypto = CryptoFactory.getInstance(props);
+ signCrypto = CryptoFactory.getInstance(props,
+
Loader.getClassLoader(CryptoFactory.class),
+
getPasswordEncryptor(message));
EndpointInfo info =
message.getExchange().get(Endpoint.class).getEndpointInfo();
synchronized (info) {
Modified:
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/PolicyBasedWSS4JStaxOutInterceptor.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/PolicyBasedWSS4JStaxOutInterceptor.java?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
---
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/PolicyBasedWSS4JStaxOutInterceptor.java
(original)
+++
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/PolicyBasedWSS4JStaxOutInterceptor.java
Tue Aug 20 10:56:47 2013
@@ -50,6 +50,7 @@ import org.apache.cxf.ws.security.wss4j.
import org.apache.wss4j.common.crypto.Crypto;
import org.apache.wss4j.common.crypto.CryptoFactory;
import org.apache.wss4j.common.ext.WSSecurityException;
+import org.apache.wss4j.common.util.Loader;
import org.apache.wss4j.dom.handler.WSHandlerConstants;
import org.apache.wss4j.policy.SP11Constants;
import org.apache.wss4j.policy.SP12Constants;
@@ -298,7 +299,9 @@ public class PolicyBasedWSS4JStaxOutInte
throw new
WSSecurityException(WSSecurityException.ErrorCode.FAILURE, ex);
}
- encrCrypto = CryptoFactory.getInstance(props);
+ encrCrypto = CryptoFactory.getInstance(props,
+
Loader.getClassLoader(CryptoFactory.class),
+
getPasswordEncryptor(message));
EndpointInfo info =
message.getExchange().get(Endpoint.class).getEndpointInfo();
synchronized (info) {
@@ -321,7 +324,9 @@ public class PolicyBasedWSS4JStaxOutInte
throw new
WSSecurityException(WSSecurityException.ErrorCode.FAILURE, ex);
}
- signCrypto = CryptoFactory.getInstance(props);
+ signCrypto = CryptoFactory.getInstance(props,
+
Loader.getClassLoader(CryptoFactory.class),
+
getPasswordEncryptor(message));
EndpointInfo info =
message.getExchange().get(Endpoint.class).getEndpointInfo();
synchronized (info) {
Modified:
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JInInterceptor.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JInInterceptor.java?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
---
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JInInterceptor.java
(original)
+++
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JInInterceptor.java
Tue Aug 20 10:56:47 2013
@@ -219,6 +219,9 @@ public class WSS4JInInterceptor extends
try {
reqData.setMsgContext(msg);
setAlgorithmSuites(msg, reqData);
+
+ reqData.setCallbackHandler(getCallback(reqData, utWithCallbacks));
+
computeAction(msg, reqData);
List<Integer> actions = new ArrayList<Integer>();
String action = getAction(msg, version);
@@ -230,8 +233,6 @@ public class WSS4JInInterceptor extends
actor =
(String)msg.getContextualProperty(SecurityConstants.ACTOR);
}
- reqData.setCallbackHandler(getCallback(reqData, doAction,
utWithCallbacks));
-
// Configure replay caching
ReplayCache nonceCache =
getReplayCache(
@@ -611,57 +612,51 @@ public class WSS4JInInterceptor extends
}
- protected CallbackHandler getCallback(RequestData reqData, int doAction,
boolean utWithCallbacks)
+ protected CallbackHandler getCallback(RequestData reqData, boolean
utWithCallbacks)
throws WSSecurityException {
- if (!utWithCallbacks
- && ((doAction & WSConstants.UT) != 0 || (doAction &
WSConstants.UT_NOPASSWORD) != 0)) {
+ if (!utWithCallbacks) {
CallbackHandler pwdCallback = null;
try {
- pwdCallback = getCallback(reqData, doAction);
+ pwdCallback = getCallback(reqData);
} catch (Exception ex) {
// ignore
}
return new DelegatingCallbackHandler(pwdCallback);
} else {
- return getCallback(reqData, doAction);
+ return getCallback(reqData);
}
}
- protected CallbackHandler getCallback(RequestData reqData, int doAction)
throws WSSecurityException {
- /*
- * To check a UsernameToken or to decrypt an encrypted message we need
a
- * password.
- */
- CallbackHandler cbHandler = null;
- if ((doAction & (WSConstants.ENCR | WSConstants.UT)) != 0) {
- Object o = ((SoapMessage)reqData.getMsgContext())
- .getContextualProperty(SecurityConstants.CALLBACK_HANDLER);
- if (o instanceof String) {
- try {
- o = ClassLoaderUtils.loadClass((String)o,
this.getClass()).newInstance();
- } catch (Exception e) {
- throw new
WSSecurityException(WSSecurityException.ErrorCode.FAILURE, e);
- }
- }
- if (o instanceof CallbackHandler) {
- cbHandler = (CallbackHandler)o;
+ protected CallbackHandler getCallback(RequestData reqData) throws
WSSecurityException {
+ Object o = ((SoapMessage)reqData.getMsgContext())
+ .getContextualProperty(SecurityConstants.CALLBACK_HANDLER);
+ if (o instanceof String) {
+ try {
+ o = ClassLoaderUtils.loadClass((String)o,
this.getClass()).newInstance();
+ } catch (Exception e) {
+ throw new
WSSecurityException(WSSecurityException.ErrorCode.FAILURE, e);
}
- if (cbHandler == null) {
- try {
- cbHandler = getPasswordCallbackHandler(reqData);
- } catch (WSSecurityException sec) {
- Endpoint ep =
((SoapMessage)reqData.getMsgContext()).getExchange().get(Endpoint.class);
- if (ep != null && ep.getEndpointInfo() != null) {
- TokenStore store = (TokenStore)ep.getEndpointInfo()
- .getProperty(TokenStore.class.getName());
- if (store != null) {
- return new TokenStoreCallbackHandler(null, store);
- }
- }
- throw sec;
- }
+ }
+ CallbackHandler cbHandler = null;
+ if (o instanceof CallbackHandler) {
+ cbHandler = (CallbackHandler)o;
+ }
+ if (cbHandler == null) {
+ try {
+ cbHandler = getPasswordCallbackHandler(reqData);
+ } catch (WSSecurityException sec) {
+ Endpoint ep =
((SoapMessage)reqData.getMsgContext()).getExchange().get(Endpoint.class);
+ if (ep != null && ep.getEndpointInfo() != null) {
+ TokenStore store = (TokenStore)ep.getEndpointInfo()
+ .getProperty(TokenStore.class.getName());
+ if (store != null) {
+ return new TokenStoreCallbackHandler(null, store);
+ }
+ }
+ throw sec;
}
}
+
Endpoint ep =
((SoapMessage)reqData.getMsgContext()).getExchange().get(Endpoint.class);
if (ep != null && ep.getEndpointInfo() != null) {
TokenStore store =
(TokenStore)ep.getEndpointInfo().getProperty(TokenStore.class.getName());
Modified:
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JStaxInInterceptor.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JStaxInInterceptor.java?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
---
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JStaxInInterceptor.java
(original)
+++
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JStaxInInterceptor.java
Tue Aug 20 10:56:47 2013
@@ -120,8 +120,8 @@ public class WSS4JStaxInInterceptor exte
(List<SecurityEvent>)
soapMessage.getExchange().get(SecurityEvent.class.getName() + ".out");
translateProperties(soapMessage);
- configureProperties(soapMessage);
configureCallbackHandler(soapMessage);
+ configureProperties(soapMessage);
InboundWSSec inboundWSSec = null;
WSSSecurityProperties secProps = null;
Modified:
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AbstractBindingBuilder.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AbstractBindingBuilder.java?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
---
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AbstractBindingBuilder.java
(original)
+++
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AbstractBindingBuilder.java
Tue Aug 20 10:56:47 2013
@@ -53,7 +53,6 @@ import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
-
import org.apache.cxf.Bus;
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.binding.soap.saaj.SAAJUtils;
@@ -82,6 +81,8 @@ import org.apache.neethi.Assertion;
import org.apache.wss4j.common.crypto.Crypto;
import org.apache.wss4j.common.crypto.CryptoFactory;
import org.apache.wss4j.common.crypto.CryptoType;
+import org.apache.wss4j.common.crypto.PasswordEncryptor;
+import org.apache.wss4j.common.crypto.StrongJasyptPasswordEncryptor;
import org.apache.wss4j.common.derivedKey.ConversationConstants;
import org.apache.wss4j.common.derivedKey.ConversationException;
import org.apache.wss4j.common.ext.WSPasswordCallback;
@@ -90,6 +91,7 @@ import org.apache.wss4j.common.principal
import org.apache.wss4j.common.saml.SAMLCallback;
import org.apache.wss4j.common.saml.SAMLUtil;
import org.apache.wss4j.common.saml.SamlAssertionWrapper;
+import org.apache.wss4j.common.util.Loader;
import org.apache.wss4j.dom.WSConstants;
import org.apache.wss4j.dom.WSEncryptionPart;
import org.apache.wss4j.dom.WSSConfig;
@@ -1101,6 +1103,7 @@ public abstract class AbstractBindingBui
try {
handler = (CallbackHandler)ClassLoaderUtils
.loadClass((String)o, this.getClass()).newInstance();
+
message.setContextualProperty(SecurityConstants.CALLBACK_HANDLER, handler);
} catch (Exception e) {
handler = null;
}
@@ -1613,12 +1616,31 @@ public abstract class AbstractBindingBui
}
if (properties != null) {
- crypto = CryptoFactory.getInstance(properties);
+ crypto = CryptoFactory.getInstance(properties,
+
Loader.getClassLoader(CryptoFactory.class),
+ getPasswordEncryptor());
getCryptoCache().put(o, crypto);
}
return crypto;
}
+ protected PasswordEncryptor getPasswordEncryptor() {
+ PasswordEncryptor passwordEncryptor =
+ (PasswordEncryptor)message.getContextualProperty(
+ SecurityConstants.PASSWORD_ENCRYPTOR_INSTANCE
+ );
+ if (passwordEncryptor != null) {
+ return passwordEncryptor;
+ }
+
+ CallbackHandler callbackHandler = getCallbackHandler();
+ if (callbackHandler != null) {
+ return new StrongJasyptPasswordEncryptor(callbackHandler);
+ }
+
+ return null;
+ }
+
public void setKeyIdentifierType(WSSecBase secBase, AbstractTokenWrapper
wrapper, AbstractToken token) {
boolean tokenTypeSet = false;
Modified:
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/action/ActionTest.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/action/ActionTest.java?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
---
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/action/ActionTest.java
(original)
+++
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/action/ActionTest.java
Tue Aug 20 10:56:47 2013
@@ -116,4 +116,25 @@ public class ActionTest extends Abstract
bus.shutdown(true);
}
+ @org.junit.Test
+ public void testEncryptedPassword() throws Exception {
+
+ SpringBusFactory bf = new SpringBusFactory();
+ URL busFile = ActionTest.class.getResource("client.xml");
+
+ Bus bus = bf.createBus(busFile.toString());
+ SpringBusFactory.setDefaultBus(bus);
+ SpringBusFactory.setThreadDefaultBus(bus);
+
+ URL wsdl = ActionTest.class.getResource("DoubleItAction.wsdl");
+ Service service = Service.create(wsdl, SERVICE_QNAME);
+ QName portQName = new QName(NAMESPACE,
"DoubleItEncryptedPasswordPort");
+ DoubleItPortType port =
+ service.getPort(portQName, DoubleItPortType.class);
+ updateAddressPort(port, PORT);
+ port.doubleIt(25);
+
+ ((java.io.Closeable)port).close();
+ bus.shutdown(true);
+ }
}
Modified:
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/common/KeystorePasswordCallback.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/common/KeystorePasswordCallback.java?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
---
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/common/KeystorePasswordCallback.java
(original)
+++
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/common/KeystorePasswordCallback.java
Tue Aug 20 10:56:47 2013
@@ -54,12 +54,16 @@ public class KeystorePasswordCallback im
public void handle(Callback[] callbacks) throws IOException,
UnsupportedCallbackException {
for (int i = 0; i < callbacks.length; i++) {
WSPasswordCallback pc = (WSPasswordCallback)callbacks[i];
- String pass = passwords.get(pc.getIdentifier());
- if (pass != null) {
- pc.setPassword(pass);
- return;
+ if (pc.getUsage() ==
WSPasswordCallback.Usage.PASSWORD_ENCRYPTOR_PASSWORD) {
+ pc.setPassword("this-is-a-secret");
} else {
- pc.setPassword("password");
+ String pass = passwords.get(pc.getIdentifier());
+ if (pass != null) {
+ pc.setPassword(pass);
+ return;
+ } else {
+ pc.setPassword("password");
+ }
}
}
}
Modified:
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/x509/StaxX509TokenTest.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/x509/StaxX509TokenTest.java?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
---
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/x509/StaxX509TokenTest.java
(original)
+++
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/x509/StaxX509TokenTest.java
Tue Aug 20 10:56:47 2013
@@ -301,6 +301,34 @@ public class StaxX509TokenTest extends A
}
@org.junit.Test
+ public void testAsymmetricEncryptedPassword() throws Exception {
+
+ SpringBusFactory bf = new SpringBusFactory();
+ URL busFile = StaxX509TokenTest.class.getResource("client.xml");
+
+ Bus bus = bf.createBus(busFile.toString());
+ SpringBusFactory.setDefaultBus(bus);
+ SpringBusFactory.setThreadDefaultBus(bus);
+
+ URL wsdl = X509TokenTest.class.getResource("DoubleItX509.wsdl");
+ Service service = Service.create(wsdl, SERVICE_QNAME);
+ QName portQName = new QName(NAMESPACE,
"DoubleItAsymmetricEncryptedPasswordPort");
+ DoubleItPortType x509Port =
+ service.getPort(portQName, DoubleItPortType.class);
+ updateAddressPort(x509Port, PORT);
+
+ // DOM
+ x509Port.doubleIt(25);
+
+ // Streaming
+ SecurityTestUtil.enableStreaming(x509Port);
+ x509Port.doubleIt(25);
+
+ ((java.io.Closeable)x509Port).close();
+ bus.shutdown(true);
+ }
+
+ @org.junit.Test
public void testAsymmetricSHA256() throws Exception {
SpringBusFactory bf = new SpringBusFactory();
Modified:
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/x509/X509TokenTest.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/x509/X509TokenTest.java?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
---
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/x509/X509TokenTest.java
(original)
+++
cxf/trunk/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/x509/X509TokenTest.java
Tue Aug 20 10:56:47 2013
@@ -356,6 +356,34 @@ public class X509TokenTest extends Abstr
}
@org.junit.Test
+ public void testAsymmetricEncryptedPassword() throws Exception {
+
+ SpringBusFactory bf = new SpringBusFactory();
+ URL busFile = X509TokenTest.class.getResource("client.xml");
+
+ Bus bus = bf.createBus(busFile.toString());
+ SpringBusFactory.setDefaultBus(bus);
+ SpringBusFactory.setThreadDefaultBus(bus);
+
+ URL wsdl = X509TokenTest.class.getResource("DoubleItX509.wsdl");
+ Service service = Service.create(wsdl, SERVICE_QNAME);
+ QName portQName = new QName(NAMESPACE,
"DoubleItAsymmetricEncryptedPasswordPort");
+ DoubleItPortType x509Port =
+ service.getPort(portQName, DoubleItPortType.class);
+ updateAddressPort(x509Port, PORT);
+
+ // DOM
+ x509Port.doubleIt(25);
+
+ // Streaming
+ SecurityTestUtil.enableStreaming(x509Port);
+ x509Port.doubleIt(25);
+
+ ((java.io.Closeable)x509Port).close();
+ bus.shutdown(true);
+ }
+
+ @org.junit.Test
public void testAsymmetricSHA256() throws Exception {
SpringBusFactory bf = new SpringBusFactory();
Added: cxf/trunk/systests/ws-security/src/test/resources/alice-enc.properties
URL:
http://svn.apache.org/viewvc/cxf/trunk/systests/ws-security/src/test/resources/alice-enc.properties?rev=1515771&view=auto
==============================================================================
--- cxf/trunk/systests/ws-security/src/test/resources/alice-enc.properties
(added)
+++ cxf/trunk/systests/ws-security/src/test/resources/alice-enc.properties Tue
Aug 20 10:56:47 2013
@@ -0,0 +1,21 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
+org.apache.ws.security.crypto.merlin.keystore.type=jks
+org.apache.ws.security.crypto.merlin.keystore.password=ENC(mC9pTqoZ9n1dW2wETrJEpHHDmgXn1e7T)
+org.apache.ws.security.crypto.merlin.keystore.alias=alice
+org.apache.ws.security.crypto.merlin.keystore.file=certs/alice.jks
Added: cxf/trunk/systests/ws-security/src/test/resources/bob-enc.properties
URL:
http://svn.apache.org/viewvc/cxf/trunk/systests/ws-security/src/test/resources/bob-enc.properties?rev=1515771&view=auto
==============================================================================
--- cxf/trunk/systests/ws-security/src/test/resources/bob-enc.properties (added)
+++ cxf/trunk/systests/ws-security/src/test/resources/bob-enc.properties Tue
Aug 20 10:56:47 2013
@@ -0,0 +1,21 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
+org.apache.ws.security.crypto.merlin.keystore.type=jks
+org.apache.ws.security.crypto.merlin.keystore.password=ENC(eAsmYazOvgvygJmuMzWG5uvRBmkvXf5G)
+org.apache.ws.security.crypto.merlin.keystore.alias=bob
+org.apache.ws.security.crypto.merlin.keystore.file=certs/bob.jks
Modified:
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/action/DoubleItAction.wsdl
URL:
http://svn.apache.org/viewvc/cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/action/DoubleItAction.wsdl?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
---
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/action/DoubleItAction.wsdl
(original)
+++
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/action/DoubleItAction.wsdl
Tue Aug 20 10:56:47 2013
@@ -57,6 +57,9 @@
<wsdl:port name="DoubleItUsernameTokenPort2"
binding="tns:DoubleItNoSecurityBinding">
<soap:address
location="http://localhost:9001/DoubleItUsernameToken2" />
</wsdl:port>
+ <wsdl:port name="DoubleItEncryptedPasswordPort"
binding="tns:DoubleItNoSecurityBinding">
+ <soap:address
location="http://localhost:9001/DoubleItEncryptedPassword" />
+ </wsdl:port>
</wsdl:service>
</wsdl:definitions>
Modified:
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/action/client.xml
URL:
http://svn.apache.org/viewvc/cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/action/client.xml?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
---
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/action/client.xml
(original)
+++
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/action/client.xml
Tue Aug 20 10:56:47 2013
@@ -81,4 +81,33 @@
</jaxws:outInterceptors>
</jaxws:client>
+ <jaxws:client
name="{http://www.example.org/contract/DoubleIt}DoubleItEncryptedPasswordPort"
+ createdFromAPI="true">
+ <jaxws:outInterceptors>
+ <bean class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor">
+ <constructor-arg>
+ <map>
+ <entry key="action" value="Encrypt"/>
+ <entry key="passwordCallbackClass"
+
value="org.apache.cxf.systest.ws.common.KeystorePasswordCallback"/>
+ <entry key="encryptionPropFile"
value="bob-enc.properties"/>
+ <entry key="encryptionUser" value="bob"/>
+ </map>
+ </constructor-arg>
+ </bean>
+ </jaxws:outInterceptors>
+ <jaxws:inInterceptors>
+ <bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
+ <constructor-arg>
+ <map>
+ <entry key="action" value="Encrypt"/>
+ <entry key="passwordCallbackClass"
+
value="org.apache.cxf.systest.ws.common.KeystorePasswordCallback"/>
+ <entry key="decryptionPropFile"
value="alice-enc.properties"/>
+ </map>
+ </constructor-arg>
+ </bean>
+ </jaxws:inInterceptors>
+ </jaxws:client>
+
</beans>
Modified:
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/action/server.xml
URL:
http://svn.apache.org/viewvc/cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/action/server.xml?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
---
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/action/server.xml
(original)
+++
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/action/server.xml
Tue Aug 20 10:56:47 2013
@@ -121,5 +121,40 @@
</jaxws:endpoint>
+ <jaxws:endpoint
+ id="EncryptedPassword"
+
address="http://localhost:${testutil.ports.Server}/DoubleItEncryptedPassword"
+ serviceName="s:DoubleItService"
+ endpointName="s:DoubleItEncryptedPasswordPort"
+ xmlns:s="http://www.example.org/contract/DoubleIt"
+ implementor="org.apache.cxf.systest.ws.common.DoubleItImpl"
+ wsdlLocation="org/apache/cxf/systest/ws/action/DoubleItAction.wsdl">
+ <jaxws:outInterceptors>
+ <bean class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor">
+ <constructor-arg>
+ <map>
+ <entry key="action" value="Encrypt"/>
+ <entry key="passwordCallbackClass"
+
value="org.apache.cxf.systest.ws.common.KeystorePasswordCallback"/>
+ <entry key="encryptionPropFile"
value="alice-enc.properties"/>
+ <entry key="encryptionUser" value="alice"/>
+ </map>
+ </constructor-arg>
+ </bean>
+ </jaxws:outInterceptors>
+ <jaxws:inInterceptors>
+ <bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
+ <constructor-arg>
+ <map>
+ <entry key="action" value="Encrypt"/>
+ <entry key="passwordCallbackClass"
+
value="org.apache.cxf.systest.ws.common.KeystorePasswordCallback"/>
+ <entry key="decryptionPropFile"
value="bob-enc.properties"/>
+ </map>
+ </constructor-arg>
+ </bean>
+ </jaxws:inInterceptors>
+
+ </jaxws:endpoint>
</beans>
Modified:
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/DoubleItX509.wsdl
URL:
http://svn.apache.org/viewvc/cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/DoubleItX509.wsdl?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
---
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/DoubleItX509.wsdl
(original)
+++
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/DoubleItX509.wsdl
Tue Aug 20 10:56:47 2013
@@ -182,6 +182,25 @@
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
+ <wsdl:binding name="DoubleItAsymmetricEncryptedPasswordBinding"
type="tns:DoubleItPortType">
+ <wsp:PolicyReference URI="#DoubleItAsymmetricIssuerSerialPolicy" />
+ <soap:binding style="document"
+ transport="http://schemas.xmlsoap.org/soap/http" />
+ <wsdl:operation name="DoubleIt">
+ <soap:operation soapAction="" />
+ <wsdl:input>
+ <soap:body use="literal" />
+ <wsp:PolicyReference
URI="#DoubleItBinding_DoubleIt_Input_Policy"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal" />
+ <wsp:PolicyReference
URI="#DoubleItBinding_DoubleIt_Output_Policy"/>
+ </wsdl:output>
+ <wsdl:fault name="DoubleItFault">
+ <soap:body use="literal" name="DoubleItFault" />
+ </wsdl:fault>
+ </wsdl:operation>
+ </wsdl:binding>
<wsdl:binding name="DoubleItAsymmetricSHA256Binding"
type="tns:DoubleItPortType">
<wsp:PolicyReference URI="#DoubleItAsymmetricSHA256Policy" />
<soap:binding style="document"
@@ -510,6 +529,10 @@
binding="tns:DoubleItAsymmetricIssuerSerialBinding">
<soap:address
location="http://localhost:9001/DoubleItX509Asymmetric" />
</wsdl:port>
+ <wsdl:port name="DoubleItAsymmetricEncryptedPasswordPort"
+ binding="tns:DoubleItAsymmetricEncryptedPasswordBinding">
+ <soap:address
location="http://localhost:9001/DoubleItX509AsymmetricEncryptedPassword" />
+ </wsdl:port>
<wsdl:port name="DoubleItAsymmetricSHA256Port"
binding="tns:DoubleItAsymmetricSHA256Binding">
<soap:address
location="http://localhost:9001/DoubleItX509AsymmetricSHA256" />
Modified:
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/client.xml
URL:
http://svn.apache.org/viewvc/cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/client.xml?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
---
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/client.xml
(original)
+++
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/client.xml
Tue Aug 20 10:56:47 2013
@@ -115,6 +115,18 @@
</jaxws:properties>
</jaxws:client>
+ <jaxws:client
name="{http://www.example.org/contract/DoubleIt}DoubleItAsymmetricEncryptedPasswordPort"
+ createdFromAPI="true">
+ <jaxws:properties>
+ <entry key="ws-security.encryption.properties"
value="bob-enc.properties"/>
+ <entry key="ws-security.encryption.username" value="bob"/>
+ <entry key="ws-security.signature.properties"
value="alice-enc.properties"/>
+ <entry key="ws-security.signature.username" value="alice"/>
+ <entry key="ws-security.callback-handler"
+
value="org.apache.cxf.systest.ws.common.KeystorePasswordCallback"/>
+ </jaxws:properties>
+ </jaxws:client>
+
<jaxws:client
name="{http://www.example.org/contract/DoubleIt}DoubleItAsymmetricSHA256Port"
createdFromAPI="true">
<jaxws:properties>
Modified:
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/server.xml
URL:
http://svn.apache.org/viewvc/cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/server.xml?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
---
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/server.xml
(original)
+++
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/server.xml
Tue Aug 20 10:56:47 2013
@@ -232,6 +232,25 @@
</jaxws:endpoint>
<jaxws:endpoint
+ id="AsymmetricEncryptedPassword"
+
address="http://localhost:${testutil.ports.Server}/DoubleItX509AsymmetricEncryptedPassword"
+ serviceName="s:DoubleItService"
+ endpointName="s:DoubleItAsymmetricEncryptedPasswordPort"
+ xmlns:s="http://www.example.org/contract/DoubleIt"
+ implementor="org.apache.cxf.systest.ws.common.DoubleItImpl"
+ wsdlLocation="org/apache/cxf/systest/ws/x509/DoubleItX509.wsdl">
+
+ <jaxws:properties>
+ <entry key="ws-security.callback-handler"
+
value="org.apache.cxf.systest.ws.common.KeystorePasswordCallback"/>
+ <entry key="ws-security.signature.properties"
value="bob-enc.properties"/>
+ <entry key="ws-security.encryption.properties"
value="alice-enc.properties"/>
+ <entry key="ws-security.encryption.username" value="alice"/>
+ </jaxws:properties>
+
+ </jaxws:endpoint>
+
+ <jaxws:endpoint
id="AsymmetricSHA256"
address="http://localhost:${testutil.ports.Server}/DoubleItX509AsymmetricSHA256"
serviceName="s:DoubleItService"
Modified:
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/stax-server.xml
URL:
http://svn.apache.org/viewvc/cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/stax-server.xml?rev=1515771&r1=1515770&r2=1515771&view=diff
==============================================================================
---
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/stax-server.xml
(original)
+++
cxf/trunk/systests/ws-security/src/test/resources/org/apache/cxf/systest/ws/x509/stax-server.xml
Tue Aug 20 10:56:47 2013
@@ -241,6 +241,26 @@
</jaxws:endpoint>
<jaxws:endpoint
+ id="AsymmetricEncryptedPassword"
+
address="http://localhost:${testutil.ports.StaxServer}/DoubleItX509AsymmetricEncryptedPassword"
+ serviceName="s:DoubleItService"
+ endpointName="s:DoubleItAsymmetricEncryptedPasswordPort"
+ xmlns:s="http://www.example.org/contract/DoubleIt"
+ implementor="org.apache.cxf.systest.ws.common.DoubleItImpl"
+ wsdlLocation="org/apache/cxf/systest/ws/x509/DoubleItX509.wsdl">
+
+ <jaxws:properties>
+ <entry key="ws-security.callback-handler"
+
value="org.apache.cxf.systest.ws.common.KeystorePasswordCallback"/>
+ <entry key="ws-security.signature.properties"
value="bob-enc.properties"/>
+ <entry key="ws-security.encryption.properties"
value="alice-enc.properties"/>
+ <entry key="ws-security.encryption.username" value="alice"/>
+ <entry key="ws-security.enable.streaming" value="true"/>
+ </jaxws:properties>
+
+ </jaxws:endpoint>
+
+ <jaxws:endpoint
id="AsymmetricSHA256"
address="http://localhost:${testutil.ports.StaxServer}/DoubleItX509AsymmetricSHA256"
serviceName="s:DoubleItService"