org.apache.ws.security.WSSecurityException: Cannot encrypt data; nest ed 
exception is:         
org.apache.xml.security.encryption.XMLEncryptionException: Illegal key s ize or 
default parameters Original Exception was java.security.InvalidKeyException
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

                 Key: RAMPART-241
                 URL: https://issues.apache.org/jira/browse/RAMPART-241
             Project: Rampart
          Issue Type: Bug
    Affects Versions: 1.4
         Environment: rampart-1.4>mvn -e install

Running org.apache.rampart.AsymmetricBindingBuilderTest
org.apache.rampart.RampartException: Error in creating an encrypted key
        at org.apache.rampart.builder.AsymmetricBindingBuilder.doEncryptBeforeSi
g(AsymmetricBindingBuilder.java:164)
        at org.apache.rampart.builder.AsymmetricBindingBuilder.build(AsymmetricB
indingBuilder.java:91)
        at org.apache.rampart.MessageBuilder.build(MessageBuilder.java:147)
        at org.apache.rampart.AsymmetricBindingBuilderTest.testAsymmBindingWithD
KEncrBeforeSig(AsymmetricBindingBuilderTest.java:148)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at junit.framework.TestCase.runTest(TestCase.java:164)
        at junit.framework.TestCase.runBare(TestCase.java:130)
        at junit.framework.TestResult$1.protect(TestResult.java:106)
        at junit.framework.TestResult.runProtected(TestResult.java:124)
        at junit.framework.TestResult.run(TestResult.java:109)
        at junit.framework.TestCase.run(TestCase.java:120)
        at junit.framework.TestSuite.runTest(TestSuite.java:230)
        at junit.framework.TestSuite.run(TestSuite.java:225)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.maven.surefire.junit.JUnitTestSet.execute(JUnitTestSet.jav
a:213)
        at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTes
tSet(AbstractDirectoryTestSuite.java:140)
        at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(Ab
stractDirectoryTestSuite.java:127)
        at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(Su
refireBooter.java:345)
        at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.j
ava:1009)
Caused by: org.apache.ws.security.WSSecurityException: Cannot encrypt data; nest
ed exception is:
        org.apache.xml.security.encryption.XMLEncryptionException: Illegal key s
ize or default parameters
Original Exception was java.security.InvalidKeyException: Illegal key size or de
fault parameters
        at org.apache.ws.security.message.WSSecDKEncrypt.doEncryption(WSSecDKEnc
rypt.java:149)
        at org.apache.ws.security.message.WSSecDKEncrypt.encryptForExternalRef(W
SSecDKEncrypt.java:188)
        at org.apache.rampart.builder.AsymmetricBindingBuilder.doEncryptBeforeSi
g(AsymmetricBindingBuilder.java:161)
        ... 29 more
Caused by: org.apache.xml.security.encryption.XMLEncryptionException: Illegal ke
y size or default parameters
Original Exception was java.security.InvalidKeyException: Illegal key size or de
fault parameters
        at org.apache.xml.security.encryption.XMLCipher.encryptData(Unknown Sour
ce)
        at org.apache.xml.security.encryption.XMLCipher.encryptData(Unknown Sour
ce)
        at org.apache.xml.security.encryption.XMLCipher.encryptElementContent(Un
known Source)
        at org.apache.xml.security.encryption.XMLCipher.doFinal(Unknown Source)
        at org.apache.ws.security.message.WSSecDKEncrypt.doEncryption(WSSecDKEnc
rypt.java:147)
        ... 31 more
org.apache.rampart.RampartException: Error during encryption
        at org.apache.rampart.builder.AsymmetricBindingBuilder.doEncryptBeforeSi
g(AsymmetricBindingBuilder.java:192)
        at org.apache.rampart.builder.AsymmetricBindingBuilder.build(AsymmetricB
indingBuilder.java:91)
        at org.apache.rampart.MessageBuilder.build(MessageBuilder.java:147)
        at org.apache.rampart.AsymmetricBindingBuilderTest.testAsymmBindingEncrB
eforeSig(AsymmetricBindingBuilderTest.java:178)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at junit.framework.TestCase.runTest(TestCase.java:164)
        at junit.framework.TestCase.runBare(TestCase.java:130)
        at junit.framework.TestResult$1.protect(TestResult.java:106)
        at junit.framework.TestResult.runProtected(TestResult.java:124)
        at junit.framework.TestResult.run(TestResult.java:109)
        at junit.framework.TestCase.run(TestCase.java:120)
        at junit.framework.TestSuite.runTest(TestSuite.java:230)
        at junit.framework.TestSuite.run(TestSuite.java:225)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.maven.surefire.junit.JUnitTestSet.execute(JUnitTestSet.jav
a:213)
        at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTes
tSet(AbstractDirectoryTestSuite.java:140)
        at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(Ab
stractDirectoryTestSuite.java:127)
        at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(Su
refireBooter.java:345)
        at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.j
ava:1009)
Caused by: org.apache.ws.security.WSSecurityException: Cannot encrypt data; nest
ed exception is:
        org.apache.xml.security.encryption.XMLEncryptionException: Illegal key s
ize or default parameters
Original Exception was java.security.InvalidKeyException: Illegal key size or de
fault parameters
        at org.apache.ws.security.message.WSSecEncrypt.doEncryption(WSSecEncrypt
.java:571)
        at org.apache.ws.security.message.WSSecEncrypt.doEncryption(WSSecEncrypt
.java:458)
        at org.apache.ws.security.message.WSSecEncrypt.encryptForExternalRef(WSS
ecEncrypt.java:396)
        at org.apache.rampart.builder.AsymmetricBindingBuilder.doEncryptBeforeSi
g(AsymmetricBindingBuilder.java:189)
        ... 29 more
Caused by: org.apache.xml.security.encryption.XMLEncryptionException: Illegal ke
y size or default parameters
Original Exception was java.security.InvalidKeyException: Illegal key size or de
fault parameters
        at org.apache.xml.security.encryption.XMLCipher.encryptData(Unknown Sour
ce)
        at org.apache.xml.security.encryption.XMLCipher.encryptData(Unknown Sour
ce)
        at org.apache.xml.security.encryption.XMLCipher.encryptElementContent(Un
known Source)
        at org.apache.xml.security.encryption.XMLCipher.doFinal(Unknown Source)
        at org.apache.ws.security.message.WSSecEncrypt.doEncryption(WSSecEncrypt
.java:564)
        ... 32 more
            Reporter: Martin Gainty
            Assignee: Ruchith Udayanga Fernando
            Priority: Minor
             Fix For: 1.4


test-resources/keys/interop2.jks contents:
Keystore type: JKS
Keystore provider: SUN

Your keystore contains 4 entries

alice, Jun 4, 2005, PrivateKeyEntry,
Certificate fingerprint (MD5): 57:CE:81:F1:03:C4:2C:F7:5B:1A:DE:AC:43:64:0A:84
root, Jun 4, 2005, trustedCertEntry,
Certificate fingerprint (MD5): 0C:0D:00:27:BF:4B:32:63:40:A8:B2:03:96:4B:58:14
ca, Jun 4, 2005, trustedCertEntry,
Certificate fingerprint (MD5): CA:0A:6D:E3:A4:9F:E8:55:98:0A:F8:10:66:35:40:C6
bob, Jun 4, 2005, PrivateKeyEntry,
Certificate fingerprint (MD5): 89:3E:86:D2:4F:9C:E7:39:B6:71:8A:EF:00:C5:89:DC


test-resources/policy/rampart-asymm-binding-1.xml:
<wsp:Policy  wsu:Id="6" 
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd";
 xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy";>
        <wsp:ExactlyOne>
                <wsp:All>
                        <sp:AsymmetricBinding 
xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy";>
                                <wsp:Policy>
                                        <sp:InitiatorToken>
                                                <wsp:Policy>
                                                        <sp:X509Token 
sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient";>
                                                                <wsp:Policy>
                                                                        
<sp:WssX509V3Token10/>
                                                                </wsp:Policy>
                                                        </sp:X509Token>
                                                </wsp:Policy>
                                        </sp:InitiatorToken>
                                        <sp:RecipientToken>
                                                <wsp:Policy>
                                                        <sp:X509Token 
sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Never";>
                                                                <wsp:Policy>
                                                                        
<sp:WssX509V3Token10/>
                                                                </wsp:Policy>
                                                        </sp:X509Token>
                                                </wsp:Policy>
                                        </sp:RecipientToken>
                                        <sp:AlgorithmSuite>
                                                <wsp:Policy>
                                                        <sp:Basic256/>
                                                </wsp:Policy>
                                        </sp:AlgorithmSuite>
                                        <sp:Layout>
                                                <wsp:Policy>
                                                        <sp:Lax/>
                                                </wsp:Policy>
                                        </sp:Layout>
                                        <sp:IncludeTimestamp/>
                                        <sp:OnlySignEntireHeadersAndBody/>
                                </wsp:Policy>
                        </sp:AsymmetricBinding>
                        <sp:Wss10 
xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy";>
                                <wsp:Policy>
                                        <sp:MustSupportRefKeyIdentifier/>
                                        <sp:MustSupportRefIssuerSerial/>
                                </wsp:Policy>
                        </sp:Wss10>
                        <sp:Trust10 
xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy";>
                                <wsp:Policy>
                                        <sp:MustSupportIssuedTokens/>
                                        <sp:RequireClientEntropy/>
                                        <sp:RequireServerEntropy/>
                                </wsp:Policy>
                        </sp:Trust10>
                        
                        <ramp:RampartConfig 
xmlns:ramp="http://ws.apache.org/rampart/policy";> 
                                <ramp:user>alice</ramp:user>
                                <ramp:encryptionUser>bob</ramp:encryptionUser>
                                
<ramp:passwordCallbackClass>org.apache.rampart.TestCBHandler</ramp:passwordCallbackClass>
                                
                                <ramp:signatureCrypto>
                                        <ramp:crypto 
provider="org.apache.ws.security.components.crypto.Merlin">
                                                <ramp:property 
name="org.apache.ws.security.crypto.merlin.keystore.type">JKS</ramp:property>
                                                <ramp:property 
name="org.apache.ws.security.crypto.merlin.file">test-resources/keys/interop2.jks</ramp:property>
                                                <ramp:property 
name="org.apache.ws.security.crypto.merlin.keystore.password">password</ramp:property>
                                        </ramp:crypto>
                                </ramp:signatureCrypto>
                                <ramp:encryptionCypto>
                                        <ramp:crypto 
provider="org.apache.ws.security.components.crypto.Merlin">
                                                <ramp:property 
name="org.apache.ws.security.crypto.merlin.keystore.type">JKS</ramp:property>
                                                <ramp:property 
name="org.apache.ws.security.crypto.merlin.file">test-resources/keys/interop2.jks</ramp:property>
                                                <ramp:property 
name="org.apache.ws.security.crypto.merlin.keystore.password">password</ramp:property>
                                        </ramp:crypto>
                                </ramp:encryptionCypto>
                        </ramp:RampartConfig>
        
                </wsp:All>
        </wsp:ExactlyOne>
</wsp:Policy>

org.apache.rampart.RampartMessageBuilderTest (which loads 
rampart-asymm-binding-1.xml policy file)

public void testAsymmBinding() {
        try {
            MessageContext ctx = getMsgCtx();
            
            String policyXml = 
"test-resources/policy/rampart-asymm-binding-1.xml";
            Policy policy = this.loadPolicy(policyXml);
            
            ctx.setProperty(RampartMessageData.KEY_RAMPART_POLICY, policy);
            
            MessageBuilder builder = new MessageBuilder();
            builder.build(ctx);
 ........
 }
 
org.apache.rampart.builder.AsymmetricBindingBuilder.java:

//build method passes on the RampartMessageData

    public void build(RampartMessageData rmd) throws RampartException {
        log.debug("AsymmetricBindingBuilder build invoked");

        RampartPolicyData rpd = rmd.getPolicyData();
        if (rpd.isIncludeTimestamp()) {
            this.addTimestamp(rmd);
        }

        if 
(SPConstants.ENCRYPT_BEFORE_SIGNING.equals(rpd.getProtectionOrder())) {
        //doEncryptBeforeSig is called here
            this.doEncryptBeforeSig(rmd);
        } else {
            this.doSignBeforeEncrypt(rmd);
        }

        log.debug("AsymmetricBindingBuilder build invoked : DONE");
    }

..........
  private void doEncryptBeforeSig(RampartMessageData rmd)
            throws RampartException {
        
        long t0 = 0, t1 = 0, t2 = 0;
        if(dotDebug){
                t0 = System.currentTimeMillis();
        }
        RampartPolicyData rpd = rmd.getPolicyData();
        Document doc = rmd.getDocument();
        RampartConfig config = rpd.getRampartConfig();

        /*
         * We need to hold on to these two element to use them as refence in the
         * case of encypting the signature
         */
        Element encrDKTokenElem = null;
        WSSecEncrypt encr = null;
        Element refList = null;
        WSSecDKEncrypt dkEncr = null;

        /*
         * We MUST use keys derived from the same token
         */
        Token encryptionToken = null;
        if(rmd.isInitiator()) {
            encryptionToken = rpd.getRecipientToken();
        } else {
            encryptionToken = rpd.getInitiatorToken();
        }
        Vector encrParts = RampartUtil.getEncryptedParts(rmd);
        
        //Signed parts are determined before encryption because encrypted 
signed  headers
        //will not be included otherwise
        this.sigParts = RampartUtil.getSignedParts(rmd);
        
        if(encryptionToken == null && encrParts.size() > 0) {
            throw new RampartException("encryptionTokenMissing");
        }
        
        if (encryptionToken != null && encrParts.size() > 0) {
            
            //Check for RampartConfig assertion
            if(rpd.getRampartConfig() == null) {
                //We'er missing the extra info rampart needs
                throw new RampartException("rampartConigMissing");
            }
            
            if (encryptionToken.isDerivedKeys()) {
                try {
                    this.setupEncryptedKey(rmd, encryptionToken);
                    // Create the DK encryption builder
                    dkEncr = new WSSecDKEncrypt();
                    dkEncr.setParts(encrParts);
                    dkEncr.setExternalKey(this.encryptedKeyValue, 
                            this.encryptedKeyId);
                            
                            /*********this rpd.getAlgorithmSuite() returns null 
causes grief ******/
                            /*****this is the AlgorithmSuite provided by policy 
file
                                        <sp:AlgorithmSuite>
                                                        <wsp:Policy>
                                                                <sp:Basic256/>
                                                        </wsp:Policy>
                                        </sp:AlgorithmSuite>
                                        <!-- safe to assume the key length is 
256 -->
                            *******/
                            /****** 
rpd.getAlgorithmSuite().getEncryptionDerivedKeyLength() 
                                   if 
(SPConstants.ALGO_SUITE_BASIC256.equals(algoSuite)) {
                                        this.digest = SPConstants.SHA1;
                                        this.encryption = SPConstants.AES256;
                                        this.symmetricKeyWrap = 
SPConstants.KW_AES256;
                                        this.asymmetricKeyWrap = 
SPConstants.KW_RSA_OAEP;
                                        this.encryptionKeyDerivation = 
SPConstants.P_SHA1_L256;
                                        this.signatureKeyDerivation = 
SPConstants.P_SHA1_L192;
                                        this.encryptionDerivedKeyLength = 256;
                                        this.signatureDerivedKeyLength = 192;
                                        this.minimumSymmetricKeyLength = 256;
                                        this.encryptionDerivedKeyLength = 256;
        } 
        ********/
                            /***** 
rpd.getAlgorithmSuite().getEncryptionDerivedKeyLength()/8 256/8 produces 32 
******/
                            
                            /*** lets take the root key 
0C:0D:00:27:BF:4B:32:63:40:A8:B2:03:96:4B:58:14 *******/
                            /****this is 16 bytes */
                            /****16 != 32 so the Assymetric TestCase will 
always fail**/
                    
dkEncr.setDerivedKeyLength(rpd.getAlgorithmSuite().getEncryptionDerivedKeyLength()/8);
                    dkEncr.prepare(doc);

                    // Get and add the DKT element
                    this.encrDKTElement = dkEncr.getdktElement();
                    encrDKTokenElem = RampartUtil.appendChildToSecHeader(rmd, 
this.encrDKTElement);

                    refList = dkEncr.encryptForExternalRef(null, encrParts);

                } catch (WSSecurityException e) {
                    throw new RampartException("errorCreatingEncryptedKey", e);
                } catch (ConversationException e) {
                    throw new RampartException("errorInDKEncr", e);
                }
            } else {
                try {
                    encr = new WSSecEncrypt();
                    encr.setParts(encrParts);
                    encr.setWsConfig(rmd.getConfig());
                    encr.setDocument(doc);
                    RampartUtil.setEncryptionUser(rmd, encr);
                    
encr.setSymmetricEncAlgorithm(rpd.getAlgorithmSuite().getEncryption());
                    RampartUtil.setKeyIdentifierType(rpd,encr, encryptionToken);
                    
encr.setKeyEncAlgo(rpd.getAlgorithmSuite().getAsymmetricKeyWrap());
                    encr.prepare(doc, RampartUtil.getEncryptionCrypto(config, 
rmd.getCustomClassLoader()));

                    Element bstElem = encr.getBinarySecurityTokenElement();
                    if (bstElem != null) {
                        RampartUtil.appendChildToSecHeader(rmd, bstElem);
                    }

                    this.encrTokenElement = encr.getEncryptedKeyElement();
                    this.encrTokenElement = 
RampartUtil.appendChildToSecHeader(rmd,
                            encrTokenElement);

                    refList = encr.encryptForExternalRef(null, encrParts);

                } catch (WSSecurityException e) {
                    throw new RampartException("errorInEncryption", e);
                }
            }
            
            SOLUTION:
            repackage a 32  byte long keystore 
(test-resources/keys/interop2.jks contents:) file
           
           i would propose a change in AlgorithmSuite to 128 in
            test-resources/policy/rampart-asymm-binding-1.xml should use a 128 
AlgorithmSuite
            but the schema defined at
            
http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/ws-securitypolicy.xsd
            does not support 128 Byte Encryption..minimum size for 
AlgorithmSuite is 256 byte 
                                                


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to