You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by co...@apache.org on 2015/04/15 15:48:58 UTC

[2/3] cxf git commit: [CXF-6327] - Invalid Policy exception for EndorsingSupportingTokens with more than one token assertions

[CXF-6327] - Invalid Policy exception for EndorsingSupportingTokens with more than one token assertions

Conflicts:
	rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AbstractBindingBuilder.java
	rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/TransportBindingHandler.java


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/7f001482
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/7f001482
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/7f001482

Branch: refs/heads/3.0.x-fixes
Commit: 7f0014828b9201e0f32a7ebe3bd02ef3ccfb760b
Parents: 97682e6
Author: Colm O hEigeartaigh <co...@apache.org>
Authored: Wed Apr 15 13:41:13 2015 +0100
Committer: Colm O hEigeartaigh <co...@apache.org>
Committed: Wed Apr 15 13:43:18 2015 +0100

----------------------------------------------------------------------
 .../policyhandlers/AbstractBindingBuilder.java  | 65 ++++++++++++--------
 .../AbstractStaxBindingHandler.java             |  9 ++-
 .../AsymmetricBindingHandler.java               | 15 ++---
 .../StaxAsymmetricBindingHandler.java           |  4 +-
 .../StaxSymmetricBindingHandler.java            |  4 +-
 .../StaxTransportBindingHandler.java            |  4 +-
 .../policyhandlers/SymmetricBindingHandler.java | 11 ++--
 .../policyhandlers/TransportBindingHandler.java | 17 +++--
 .../sts/transport/TransportBindingTest.java     |  7 ++-
 .../cxf/systest/sts/transport/DoubleIt.wsdl     |  3 +-
 .../cxf/systest/sts/transport/cxf-service.xml   |  3 +-
 .../systest/sts/transport/cxf-stax-service.xml  |  3 +-
 12 files changed, 85 insertions(+), 60 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/7f001482/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AbstractBindingBuilder.java
----------------------------------------------------------------------
diff --git a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AbstractBindingBuilder.java b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AbstractBindingBuilder.java
index fec27e8..a996944 100644
--- a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AbstractBindingBuilder.java
+++ b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AbstractBindingBuilder.java
@@ -113,7 +113,6 @@ import org.apache.wss4j.policy.model.AbstractSecurityAssertion;
 import org.apache.wss4j.policy.model.AbstractSymmetricAsymmetricBinding;
 import org.apache.wss4j.policy.model.AbstractToken;
 import org.apache.wss4j.policy.model.AbstractToken.DerivedKeys;
-import org.apache.wss4j.policy.model.AbstractTokenWrapper;
 import org.apache.wss4j.policy.model.AlgorithmSuite.AlgorithmSuiteType;
 import org.apache.wss4j.policy.model.AsymmetricBinding;
 import org.apache.wss4j.policy.model.Attachments;
@@ -492,7 +491,8 @@ public abstract class AbstractBindingBuilder extends AbstractCommonBindingHandle
 
             } else if (token instanceof X509Token) {
                 //We have to use a cert. Prepare X509 signature
-                WSSecSignature sig = getSignatureBuilder(suppTokens, token, endorse);
+                WSSecSignature sig = getSignatureBuilder(token, false, endorse);
+                assertPolicy(suppTokens);
                 Element bstElem = sig.getBinarySecurityTokenElement();
                 if (bstElem != null) {
                     if (lastEncryptedKeyElement != null) {
@@ -513,7 +513,8 @@ public abstract class AbstractBindingBuilder extends AbstractCommonBindingHandle
                 }
                 ret.add(new SupportingToken(token, sig, getSignedParts(suppTokens)));
             } else if (token instanceof KeyValueToken) {
-                WSSecSignature sig = getSignatureBuilder(suppTokens, token, endorse);
+                WSSecSignature sig = getSignatureBuilder(token, false, endorse);
+                assertPolicy(suppTokens);
                 if (suppTokens.isEncryptedToken()) {
                     WSEncryptionPart part = new WSEncryptionPart(sig.getBSTTokenId(), "Element");
                     encryptedTokensList.add(part);
@@ -860,7 +861,7 @@ public abstract class AbstractBindingBuilder extends AbstractCommonBindingHandle
             }
             Crypto crypto = samlCallback.getIssuerCrypto();
             if (crypto == null) {
-                crypto = getSignatureCrypto(null);
+                crypto = getSignatureCrypto();
             }
             
             assertion.signAssertion(
@@ -1372,12 +1373,21 @@ public abstract class AbstractBindingBuilder extends AbstractCommonBindingHandle
         return null;
     }
     
+<<<<<<< HEAD
     protected WSSecEncryptedKey getEncryptedKeyBuilder(AbstractTokenWrapper wrapper, 
                                                        AbstractToken token) throws WSSecurityException {
         WSSecEncryptedKey encrKey = new WSSecEncryptedKey(wssConfig);
         Crypto crypto = getEncryptionCrypto(wrapper);
+=======
+    protected WSSecEncryptedKey getEncryptedKeyBuilder(AbstractToken token) throws WSSecurityException {
+        WSSecEncryptedKey encrKey = new WSSecEncryptedKey();
+        encrKey.setIdAllocator(wssConfig.getIdAllocator());
+        encrKey.setCallbackLookup(callbackLookup);
+        Crypto crypto = getEncryptionCrypto();
+>>>>>>> aaad96f... [CXF-6327] - Invalid Policy exception for EndorsingSupportingTokens with more than one token assertions
         message.getExchange().put(SecurityConstants.ENCRYPT_CRYPTO, crypto);
-        setKeyIdentifierType(encrKey, wrapper, token);
+        setKeyIdentifierType(encrKey, token);
+        
         boolean alsoIncludeToken = false;
         // Find out do we also need to include the token as per the Inclusion requirement
         if (token instanceof X509Token 
@@ -1386,7 +1396,7 @@ public abstract class AbstractBindingBuilder extends AbstractCommonBindingHandle
             alsoIncludeToken = true;
         }
         
-        String encrUser = setEncryptionUser(encrKey, wrapper, false, crypto);
+        String encrUser = setEncryptionUser(encrKey, token, false, crypto);
         
         AlgorithmSuiteType algType = binding.getAlgorithmSuite().getAlgorithmSuiteType();
         encrKey.setSymmetricEncAlgorithm(algType.getEncryption());
@@ -1421,17 +1431,28 @@ public abstract class AbstractBindingBuilder extends AbstractCommonBindingHandle
         return certs[0];
     }
     
-    public Crypto getSignatureCrypto(AbstractTokenWrapper wrapper) throws WSSecurityException {
-        return getCrypto(wrapper, SecurityConstants.SIGNATURE_CRYPTO,
-                         SecurityConstants.SIGNATURE_PROPERTIES);
+    public Crypto getSignatureCrypto() throws WSSecurityException {
+        return getCrypto(SecurityConstants.SIGNATURE_CRYPTO, SecurityConstants.SIGNATURE_PROPERTIES);
     }
 
+<<<<<<< HEAD
 
     public Crypto getEncryptionCrypto(AbstractTokenWrapper wrapper) throws WSSecurityException {
         Crypto crypto = getCrypto(wrapper, SecurityConstants.ENCRYPT_CRYPTO,
                                   SecurityConstants.ENCRYPT_PROPERTIES);
         boolean enableRevocation = MessageUtils.isTrue(
                                        message.getContextualProperty(SecurityConstants.ENABLE_REVOCATION));
+=======
+    public Crypto getEncryptionCrypto() throws WSSecurityException {
+        Crypto crypto = 
+            getCrypto(SecurityConstants.ENCRYPT_CRYPTO, SecurityConstants.ENCRYPT_PROPERTIES);
+        boolean enableRevocation = false;
+        String enableRevStr = 
+            (String)SecurityUtils.getSecurityPropertyValue(SecurityConstants.ENABLE_REVOCATION, message);
+        if (enableRevStr != null) {
+            enableRevocation = Boolean.parseBoolean(enableRevStr);
+        }
+>>>>>>> aaad96f... [CXF-6327] - Invalid Policy exception for EndorsingSupportingTokens with more than one token assertions
         if (enableRevocation && crypto != null) {
             CryptoType cryptoType = new CryptoType(CryptoType.TYPE.ALIAS);
             String encrUser = (String)message.getContextualProperty(SecurityConstants.ENCRYPT_USERNAME);
@@ -1452,8 +1473,7 @@ public abstract class AbstractBindingBuilder extends AbstractCommonBindingHandle
 
     }
     
-    public Crypto getCrypto(
-        AbstractTokenWrapper wrapper, 
+    protected Crypto getCrypto(
         String cryptoKey, 
         String propKey
     ) throws WSSecurityException {
@@ -1503,7 +1523,7 @@ public abstract class AbstractBindingBuilder extends AbstractCommonBindingHandle
         return null;
     }
     
-    public void setKeyIdentifierType(WSSecBase secBase, AbstractTokenWrapper wrapper, AbstractToken token) {
+    public void setKeyIdentifierType(WSSecBase secBase, AbstractToken token) {
         boolean tokenTypeSet = false;
         
         if (token instanceof X509Token) {
@@ -1524,7 +1544,6 @@ public abstract class AbstractBindingBuilder extends AbstractCommonBindingHandle
         }
         
         assertPolicy(token);
-        assertPolicy(wrapper);
         
         if (!tokenTypeSet) {
             boolean requestor = isRequestor();
@@ -1551,7 +1570,7 @@ public abstract class AbstractBindingBuilder extends AbstractCommonBindingHandle
         }
     }
     
-    public String setEncryptionUser(WSSecEncryptedKey encrKeyBuilder, AbstractTokenWrapper token,
+    public String setEncryptionUser(WSSecEncryptedKey encrKeyBuilder, AbstractToken token,
                                   boolean sign, Crypto crypto) {
         // Check for prepared certificate property
         X509Certificate encrCert = (X509Certificate)message.getContextualProperty(SecurityConstants.ENCRYPT_CERT);
@@ -1659,20 +1678,13 @@ public abstract class AbstractBindingBuilder extends AbstractCommonBindingHandle
     }
     
     protected WSSecSignature getSignatureBuilder(
-        AbstractTokenWrapper wrapper, AbstractToken token, boolean endorse
-    ) throws WSSecurityException {
-        return getSignatureBuilder(wrapper, token, false, endorse);
-    }
-    
-    protected WSSecSignature getSignatureBuilder(
-        AbstractTokenWrapper wrapper, AbstractToken token, boolean attached, boolean endorse
+        AbstractToken token, boolean attached, boolean endorse
     ) throws WSSecurityException {
         WSSecSignature sig = new WSSecSignature(wssConfig);
         sig.setAttachmentCallbackHandler(new AttachmentCallbackHandler(message));
         checkForX509PkiPath(sig, token);
         if (token instanceof IssuedToken || token instanceof SamlToken) {
             assertPolicy(token);
-            assertPolicy(wrapper);
             SecurityToken securityToken = getSecurityToken();
             String tokenType = securityToken.getTokenType();
             
@@ -1720,7 +1732,7 @@ public abstract class AbstractBindingBuilder extends AbstractCommonBindingHandle
             
             sig.setCustomTokenId(sigTokId);
         } else {
-            setKeyIdentifierType(sig, wrapper, token);
+            setKeyIdentifierType(sig, token);
             // Find out do we also need to include the token as per the Inclusion requirement
             if (token instanceof X509Token 
                 && token.getIncludeTokenType() != IncludeTokenType.INCLUDE_TOKEN_NEVER
@@ -1738,13 +1750,12 @@ public abstract class AbstractBindingBuilder extends AbstractCommonBindingHandle
             userNameKey = SecurityConstants.ENCRYPT_USERNAME;
         }
 
-        Crypto crypto = encryptCrypto ? getEncryptionCrypto(wrapper) 
-            : getSignatureCrypto(wrapper);
+        Crypto crypto = encryptCrypto ? getEncryptionCrypto() : getSignatureCrypto();
         
         if (endorse && crypto == null && binding instanceof SymmetricBinding) {
             type = "encryption";
             userNameKey = SecurityConstants.ENCRYPT_USERNAME;
-            crypto = getEncryptionCrypto(wrapper);
+            crypto = getEncryptionCrypto();
         }
         
         if (!endorse) {
@@ -2013,7 +2024,7 @@ public abstract class AbstractBindingBuilder extends AbstractCommonBindingHandle
         sig.setSecretKey(tok.getSecret());
         sig.setSignatureAlgorithm(binding.getAlgorithmSuite().getSymmetricSignature());
         sig.setSigCanonicalization(binding.getAlgorithmSuite().getC14n().getValue());
-        sig.prepare(doc, getSignatureCrypto(null), secHeader);
+        sig.prepare(doc, getSignatureCrypto(), secHeader);
 
         sig.setParts(sigParts);
         List<Reference> referenceList = sig.addReferencesToSign(sigParts, secHeader);

http://git-wip-us.apache.org/repos/asf/cxf/blob/7f001482/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AbstractStaxBindingHandler.java
----------------------------------------------------------------------
diff --git a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AbstractStaxBindingHandler.java b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AbstractStaxBindingHandler.java
index 05c4c97..fb12cbe 100644
--- a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AbstractStaxBindingHandler.java
+++ b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AbstractStaxBindingHandler.java
@@ -57,7 +57,6 @@ import org.apache.wss4j.policy.SPConstants;
 import org.apache.wss4j.policy.SPConstants.IncludeTokenType;
 import org.apache.wss4j.policy.model.AbstractBinding;
 import org.apache.wss4j.policy.model.AbstractToken;
-import org.apache.wss4j.policy.model.AbstractTokenWrapper;
 import org.apache.wss4j.policy.model.AlgorithmSuite.AlgorithmSuiteType;
 import org.apache.wss4j.policy.model.Attachments;
 import org.apache.wss4j.policy.model.ContentEncryptedElements;
@@ -509,7 +508,7 @@ public abstract class AbstractStaxBindingHandler extends AbstractCommonBindingHa
     }
 
     protected void configureSignature(
-        AbstractTokenWrapper wrapper, AbstractToken token, boolean attached
+        AbstractToken token, boolean attached
     ) throws WSSecurityException {
         
         if (token instanceof X509Token) {
@@ -521,7 +520,7 @@ public abstract class AbstractStaxBindingHandler extends AbstractCommonBindingHa
             }
         }
         
-        properties.setSignatureKeyIdentifier(getKeyIdentifierType(wrapper, token));
+        properties.setSignatureKeyIdentifier(getKeyIdentifierType(token));
 
         // Find out do we also need to include the token as per the Inclusion requirement
         WSSecurityTokenConstants.KeyIdentifier keyIdentifier = properties.getSignatureKeyIdentifier();
@@ -562,7 +561,7 @@ public abstract class AbstractStaxBindingHandler extends AbstractCommonBindingHa
     }
     
     protected WSSecurityTokenConstants.KeyIdentifier getKeyIdentifierType(
-        AbstractTokenWrapper wrapper, AbstractToken token
+        AbstractToken token
     ) {
         WSSecurityTokenConstants.KeyIdentifier identifier = null;
         if (token instanceof X509Token) {
@@ -679,7 +678,7 @@ public abstract class AbstractStaxBindingHandler extends AbstractCommonBindingHa
                 }
             } else if (token instanceof X509Token || token instanceof KeyValueToken) {
                 assertToken(token);
-                configureSignature(suppTokens, token, false);
+                configureSignature(token, false);
                 if (suppTokens.isEncryptedToken()) {
                     SecurePart part = 
                         new SecurePart(WSSConstants.TAG_wsse_BinarySecurityToken, Modifier.Element);

http://git-wip-us.apache.org/repos/asf/cxf/blob/7f001482/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AsymmetricBindingHandler.java
----------------------------------------------------------------------
diff --git a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AsymmetricBindingHandler.java b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AsymmetricBindingHandler.java
index 9acaee6..83c3b50 100644
--- a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AsymmetricBindingHandler.java
+++ b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/AsymmetricBindingHandler.java
@@ -483,7 +483,7 @@ public class AsymmetricBindingHandler extends AbstractBindingBuilder {
                     encr.setAttachmentCallbackHandler(new AttachmentCallbackHandler(message));
                     
                     encr.setDocument(saaj.getSOAPPart());
-                    Crypto crypto = getEncryptionCrypto(recToken);
+                    Crypto crypto = getEncryptionCrypto();
                     
                     SecurityToken securityToken = getSecurityToken();
                     if (!isRequestor() && securityToken != null 
@@ -500,10 +500,10 @@ public class AsymmetricBindingHandler extends AbstractBindingBuilder {
                             encr.setKeyIdentifierType(WSConstants.CUSTOM_KEY_IDENTIFIER);
                             encr.setCustomEKTokenId(securityToken.getId());
                         } else {
-                            setKeyIdentifierType(encr, recToken, encrToken);
+                            setKeyIdentifierType(encr, encrToken);
                         }
                     } else {
-                        setKeyIdentifierType(encr, recToken, encrToken);
+                        setKeyIdentifierType(encr, encrToken);
                     }
                     //
                     // Using a stored cert is only suitable for the Issued Token case, where
@@ -513,7 +513,7 @@ public class AsymmetricBindingHandler extends AbstractBindingBuilder {
                         && securityToken.getX509Certificate() != null) {
                         encr.setUseThisCert(securityToken.getX509Certificate());
                     } else {
-                        setEncryptionUser(encr, recToken, false, crypto);
+                        setEncryptionUser(encr, encrToken, false, crypto);
                     }
                     if (!encr.isCertSet() && crypto == null) {
                         policyNotAsserted(recToken, "Missing security configuration. "
@@ -605,7 +605,7 @@ public class AsymmetricBindingHandler extends AbstractBindingBuilder {
         if (sigParts.isEmpty()) {
             // Add the BST to the security header if required
             if (!attached && isTokenRequired(sigToken.getIncludeTokenType())) {
-                WSSecSignature sig = getSignatureBuilder(wrapper, sigToken, attached, false);
+                WSSecSignature sig = getSignatureBuilder(sigToken, attached, false);
                 sig.appendBSTElementToHeader(secHeader);
             } 
             return;
@@ -670,7 +670,7 @@ public class AsymmetricBindingHandler extends AbstractBindingBuilder {
                 throw new Fault(ex);
             }
         } else {
-            WSSecSignature sig = getSignatureBuilder(wrapper, sigToken, attached, false);
+            WSSecSignature sig = getSignatureBuilder(sigToken, attached, false);
                       
             // This action must occur before sig.prependBSTElementToHeader
             if (abinding.isProtectTokens()) {
@@ -784,7 +784,8 @@ public class AsymmetricBindingHandler extends AbstractBindingBuilder {
     private void createEncryptedKey(AbstractTokenWrapper wrapper, AbstractToken token)
         throws WSSecurityException {
         //Set up the encrypted key to use
-        encrKey = this.getEncryptedKeyBuilder(wrapper, token);
+        encrKey = this.getEncryptedKeyBuilder(token);
+        assertPolicy(wrapper);
         Element bstElem = encrKey.getBinarySecurityTokenElement();
         if (bstElem != null) {
             // If a BST is available then use it

http://git-wip-us.apache.org/repos/asf/cxf/blob/7f001482/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/StaxAsymmetricBindingHandler.java
----------------------------------------------------------------------
diff --git a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/StaxAsymmetricBindingHandler.java b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/StaxAsymmetricBindingHandler.java
index 2d1ebb1..843ffd2 100644
--- a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/StaxAsymmetricBindingHandler.java
+++ b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/StaxAsymmetricBindingHandler.java
@@ -356,7 +356,7 @@ public class StaxAsymmetricBindingHandler extends AbstractStaxBindingHandler {
             properties.addAction(actionToPerform);
             
             properties.getEncryptionSecureParts().addAll(encrParts);
-            properties.setEncryptionKeyIdentifier(getKeyIdentifierType(recToken, encrToken));
+            properties.setEncryptionKeyIdentifier(getKeyIdentifierType(encrToken));
             
             // Find out do we also need to include the token as per the Inclusion requirement
             WSSecurityTokenConstants.KeyIdentifier keyIdentifier = properties.getEncryptionKeyIdentifier();
@@ -424,7 +424,7 @@ public class StaxAsymmetricBindingHandler extends AbstractStaxBindingHandler {
         properties.getSignatureSecureParts().addAll(sigParts);
         
         AbstractToken sigToken = wrapper.getToken();
-        configureSignature(wrapper, sigToken, false);
+        configureSignature(sigToken, false);
         
         if (abinding.isProtectTokens() && (sigToken instanceof X509Token)
             && sigToken.getIncludeTokenType() != IncludeTokenType.INCLUDE_TOKEN_NEVER) {

http://git-wip-us.apache.org/repos/asf/cxf/blob/7f001482/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/StaxSymmetricBindingHandler.java
----------------------------------------------------------------------
diff --git a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/StaxSymmetricBindingHandler.java b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/StaxSymmetricBindingHandler.java
index 4b41380..d5a3084 100644
--- a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/StaxSymmetricBindingHandler.java
+++ b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/StaxSymmetricBindingHandler.java
@@ -423,7 +423,7 @@ public class StaxSymmetricBindingHandler extends AbstractStaxBindingHandler {
             properties.addAction(actionToPerform);
 
             if (isRequestor()) {
-                properties.setEncryptionKeyIdentifier(getKeyIdentifierType(recToken, encrToken));
+                properties.setEncryptionKeyIdentifier(getKeyIdentifierType(encrToken));
                 properties.setDerivedKeyKeyIdentifier(
                     WSSecurityTokenConstants.KeyIdentifier_SecurityTokenDirectReference);
             } else if (recToken.getToken() instanceof KerberosToken && !isRequestor()) {
@@ -538,7 +538,7 @@ public class StaxSymmetricBindingHandler extends AbstractStaxBindingHandler {
             properties.addSignaturePart(securePart);
         }
         
-        configureSignature(wrapper, sigToken, false);
+        configureSignature(sigToken, false);
         
         if (policyToken instanceof X509Token) {
             properties.setIncludeSignatureToken(false);

http://git-wip-us.apache.org/repos/asf/cxf/blob/7f001482/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/StaxTransportBindingHandler.java
----------------------------------------------------------------------
diff --git a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/StaxTransportBindingHandler.java b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/StaxTransportBindingHandler.java
index 46fa53e..decb8c3 100644
--- a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/StaxTransportBindingHandler.java
+++ b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/StaxTransportBindingHandler.java
@@ -348,7 +348,7 @@ public class StaxTransportBindingHandler extends AbstractStaxBindingHandler {
         } else if (token instanceof KerberosToken) {
             WSSSecurityProperties properties = getProperties();
             properties.addAction(WSSConstants.SIGNATURE);
-            configureSignature(wrapper, token, false);
+            configureSignature(token, false);
             
             addKerberosToken((KerberosToken)token, false, true, false);
             signPartsAndElements(wrapper.getSignedParts(), wrapper.getSignedElements());
@@ -375,7 +375,7 @@ public class StaxTransportBindingHandler extends AbstractStaxBindingHandler {
         }
         properties.addAction(actionToPerform);
         
-        configureSignature(wrapper, token, false);
+        configureSignature(token, false);
         if (token.getDerivedKeys() == DerivedKeys.RequireDerivedKeys) {
             properties.setSignatureAlgorithm(
                    tbinding.getAlgorithmSuite().getSymmetricSignature());

http://git-wip-us.apache.org/repos/asf/cxf/blob/7f001482/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/SymmetricBindingHandler.java
----------------------------------------------------------------------
diff --git a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/SymmetricBindingHandler.java b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/SymmetricBindingHandler.java
index a46fb30..6bc2528 100644
--- a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/SymmetricBindingHandler.java
+++ b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/SymmetricBindingHandler.java
@@ -534,10 +534,10 @@ public class SymmetricBindingHandler extends AbstractBindingBuilder {
                     }
                     encr.setEncKeyId(encrTokId);
                     encr.setEphemeralKey(encrTok.getSecret());
-                    Crypto crypto = getEncryptionCrypto(recToken);
+                    Crypto crypto = getEncryptionCrypto();
                     if (crypto != null) {
                         this.message.getExchange().put(SecurityConstants.ENCRYPT_CRYPTO, crypto);
-                        setEncryptionUser(encr, recToken, false, crypto);
+                        setEncryptionUser(encr, encrToken, false, crypto);
                     }
                     
                     encr.setDocument(saaj.getSOAPPart());
@@ -834,9 +834,9 @@ public class SymmetricBindingHandler extends AbstractBindingBuilder {
             sig.setSigCanonicalization(sbinding.getAlgorithmSuite().getC14n().getValue());
             Crypto crypto = null;
             if (sbinding.getProtectionToken() != null) {
-                crypto = getEncryptionCrypto(sbinding.getProtectionToken());
+                crypto = getEncryptionCrypto();
             } else {
-                crypto = getSignatureCrypto(policyAbstractTokenWrapper);
+                crypto = getSignatureCrypto();
             }
             this.message.getExchange().put(SecurityConstants.SIGNATURE_CRYPTO, crypto);
             sig.prepare(saaj.getSOAPPart(), crypto, secHeader);
@@ -857,7 +857,8 @@ public class SymmetricBindingHandler extends AbstractBindingBuilder {
     }
 
     private String setupEncryptedKey(AbstractTokenWrapper wrapper, AbstractToken sigToken) throws WSSecurityException {
-        WSSecEncryptedKey encrKey = this.getEncryptedKeyBuilder(wrapper, sigToken);
+        WSSecEncryptedKey encrKey = this.getEncryptedKeyBuilder(sigToken);
+        assertPolicy(wrapper);
         String id = encrKey.getId();
         byte[] secret = encrKey.getEphemeralKey();
 

http://git-wip-us.apache.org/repos/asf/cxf/blob/7f001482/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/TransportBindingHandler.java
----------------------------------------------------------------------
diff --git a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/TransportBindingHandler.java b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/TransportBindingHandler.java
index 113e507..c35d202 100644
--- a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/TransportBindingHandler.java
+++ b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyhandlers/TransportBindingHandler.java
@@ -355,7 +355,8 @@ public class TransportBindingHandler extends AbstractBindingBuilder {
             signPartsAndElements(wrapper.getSignedParts(), wrapper.getSignedElements());
         
         if (token.getDerivedKeys() == DerivedKeys.RequireDerivedKeys) {
-            WSSecEncryptedKey encrKey = getEncryptedKeyBuilder(wrapper, token);
+            WSSecEncryptedKey encrKey = getEncryptedKeyBuilder(token);
+            assertPolicy(wrapper);
             
             Element bstElem = encrKey.getBinarySecurityTokenElement();
             if (bstElem != null) {
@@ -363,8 +364,15 @@ public class TransportBindingHandler extends AbstractBindingBuilder {
             }
             encrKey.appendToHeader(secHeader);
             
+<<<<<<< HEAD
             WSSecDKSign dkSig = new WSSecDKSign(wssConfig);
             if (wrapper.getToken().getVersion() == SPConstants.SPVersion.SP11) {
+=======
+            WSSecDKSign dkSig = new WSSecDKSign();
+            dkSig.setIdAllocator(wssConfig.getIdAllocator());
+            dkSig.setCallbackLookup(callbackLookup);
+            if (token.getVersion() == SPConstants.SPVersion.SP11) {
+>>>>>>> aaad96f... [CXF-6327] - Invalid Policy exception for EndorsingSupportingTokens with more than one token assertions
                 dkSig.setWscVersion(ConversationConstants.VERSION_05_02);
             }
             
@@ -386,7 +394,8 @@ public class TransportBindingHandler extends AbstractBindingBuilder {
             
             return dkSig.getSignatureValue();
         } else {
-            WSSecSignature sig = getSignatureBuilder(wrapper, token, false);
+            WSSecSignature sig = getSignatureBuilder(token, false, false);
+            assertPolicy(wrapper);
             if (sig != null) {
                 sig.prependBSTElementToHeader(secHeader);
             
@@ -552,7 +561,7 @@ public class TransportBindingHandler extends AbstractBindingBuilder {
 
             crypto = secTok.getCrypto();
             if (crypto == null) {
-                crypto = getSignatureCrypto(wrapper);
+                crypto = getSignatureCrypto();
             }
             if (crypto == null) {
                 LOG.fine("No signature Crypto properties are available");
@@ -574,7 +583,7 @@ public class TransportBindingHandler extends AbstractBindingBuilder {
             sig.setUserInfo(uname, password);
             sig.setSignatureAlgorithm(binding.getAlgorithmSuite().getAsymmetricSignature());
         } else {
-            crypto = getSignatureCrypto(wrapper);
+            crypto = getSignatureCrypto();
             sig.setSecretKey(secTok.getSecret());
             sig.setSignatureAlgorithm(binding.getAlgorithmSuite().getSymmetricSignature());
         }

http://git-wip-us.apache.org/repos/asf/cxf/blob/7f001482/services/sts/systests/basic/src/test/java/org/apache/cxf/systest/sts/transport/TransportBindingTest.java
----------------------------------------------------------------------
diff --git a/services/sts/systests/basic/src/test/java/org/apache/cxf/systest/sts/transport/TransportBindingTest.java b/services/sts/systests/basic/src/test/java/org/apache/cxf/systest/sts/transport/TransportBindingTest.java
index ba23de9..6a91247 100644
--- a/services/sts/systests/basic/src/test/java/org/apache/cxf/systest/sts/transport/TransportBindingTest.java
+++ b/services/sts/systests/basic/src/test/java/org/apache/cxf/systest/sts/transport/TransportBindingTest.java
@@ -378,10 +378,13 @@ public class TransportBindingTest extends AbstractBusClientServerTestBase {
         bus.shutdown(true);
     }
     
-    // TODO Not supported for now
     @org.junit.Test
-    @org.junit.Ignore
     public void testSAML2EndorsingX509() throws Exception {
+        
+        // Only works for DOM (clients)
+        if (test.isStreaming()) {
+            return;
+        }
 
         SpringBusFactory bf = new SpringBusFactory();
         URL busFile = TransportBindingTest.class.getResource("cxf-client.xml");

http://git-wip-us.apache.org/repos/asf/cxf/blob/7f001482/services/sts/systests/basic/src/test/resources/org/apache/cxf/systest/sts/transport/DoubleIt.wsdl
----------------------------------------------------------------------
diff --git a/services/sts/systests/basic/src/test/resources/org/apache/cxf/systest/sts/transport/DoubleIt.wsdl b/services/sts/systests/basic/src/test/resources/org/apache/cxf/systest/sts/transport/DoubleIt.wsdl
index d08b102..fe0e803 100644
--- a/services/sts/systests/basic/src/test/resources/org/apache/cxf/systest/sts/transport/DoubleIt.wsdl
+++ b/services/sts/systests/basic/src/test/resources/org/apache/cxf/systest/sts/transport/DoubleIt.wsdl
@@ -349,10 +349,9 @@
                                 </wsaw:Metadata>
                             </sp:Issuer>
                         </sp:IssuedToken>
-                        <sp:X509Token sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Never">
+                        <sp:X509Token sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
                             <wsp:Policy>
                                 <sp:WssX509V3Token10/>
-                                <sp:RequireIssuerSerialReference/>
                             </wsp:Policy>
                         </sp:X509Token>
                     </wsp:Policy>

http://git-wip-us.apache.org/repos/asf/cxf/blob/7f001482/services/sts/systests/basic/src/test/resources/org/apache/cxf/systest/sts/transport/cxf-service.xml
----------------------------------------------------------------------
diff --git a/services/sts/systests/basic/src/test/resources/org/apache/cxf/systest/sts/transport/cxf-service.xml b/services/sts/systests/basic/src/test/resources/org/apache/cxf/systest/sts/transport/cxf-service.xml
index a5dbcc4..3fbf5a2 100644
--- a/services/sts/systests/basic/src/test/resources/org/apache/cxf/systest/sts/transport/cxf-service.xml
+++ b/services/sts/systests/basic/src/test/resources/org/apache/cxf/systest/sts/transport/cxf-service.xml
@@ -48,7 +48,8 @@
     <jaxws:endpoint xmlns:s="http://www.example.org/contract/DoubleIt" id="doubleittransportsaml2x509" implementor="org.apache.cxf.systest.sts.common.DoubleItPortTypeImpl" endpointName="s:DoubleItTransportSAML2X509EndorsingPort" serviceName="s:DoubleItService" depends-on="ClientAuthHttpsSettings" address="https://localhost:${testutil.ports.Server}/doubleit/services/doubleittransportsaml2x509endorsing" wsdlLocation="org/apache/cxf/systest/sts/transport/DoubleIt.wsdl">
         <jaxws:properties>
             <entry key="ws-security.callback-handler" value="org.apache.cxf.systest.sts.common.CommonCallbackHandler"/>
-            <entry key="ws-security.signature.properties" value="serviceKeystore.properties"/>
+            <entry key="ws-security.signature.properties" value="stsKeystore.properties"/>
+            <entry key="ws-security.enable.timestamp.cache" value="false"/>
         </jaxws:properties>
     </jaxws:endpoint>
     <httpj:engine-factory id="ClientAuthHttpsSettings" bus="cxf">

http://git-wip-us.apache.org/repos/asf/cxf/blob/7f001482/services/sts/systests/basic/src/test/resources/org/apache/cxf/systest/sts/transport/cxf-stax-service.xml
----------------------------------------------------------------------
diff --git a/services/sts/systests/basic/src/test/resources/org/apache/cxf/systest/sts/transport/cxf-stax-service.xml b/services/sts/systests/basic/src/test/resources/org/apache/cxf/systest/sts/transport/cxf-stax-service.xml
index f9d7a0c..6aa03e8 100644
--- a/services/sts/systests/basic/src/test/resources/org/apache/cxf/systest/sts/transport/cxf-stax-service.xml
+++ b/services/sts/systests/basic/src/test/resources/org/apache/cxf/systest/sts/transport/cxf-stax-service.xml
@@ -51,9 +51,10 @@
     <jaxws:endpoint xmlns:s="http://www.example.org/contract/DoubleIt" id="doubleittransportsaml2x509endorsing" implementor="org.apache.cxf.systest.sts.common.DoubleItPortTypeImpl" endpointName="s:DoubleItTransportSAML2X509EndorsingPort" serviceName="s:DoubleItService" depends-on="ClientAuthHttpsSettings" address="https://localhost:${testutil.ports.StaxServer}/doubleit/services/doubleittransportsaml2x509endorsing" wsdlLocation="org/apache/cxf/systest/sts/transport/DoubleIt.wsdl">
         <jaxws:properties>
             <entry key="ws-security.callback-handler" value="org.apache.cxf.systest.sts.common.CommonCallbackHandler"/>
-            <entry key="ws-security.signature.properties" value="serviceKeystore.properties"/>
+            <entry key="ws-security.signature.properties" value="stsKeystore.properties"/>
             <entry key="ws-security.is-bsp-compliant" value="false"/>
             <entry key="ws-security.enable.streaming" value="true"/>
+            <entry key="ws-security.enable.timestamp.cache" value="false"/>
         </jaxws:properties>
     </jaxws:endpoint>
     <httpj:engine-factory id="ClientAuthHttpsSettings" bus="cxf">