You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fx-dev@ws.apache.org by we...@apache.org on 2004/03/07 11:36:45 UTC

cvs commit: ws-fx/wss4j/test/wssec TestWSSecurity12.java TestWSSecurity.java TestWSSecurity2.java

werner      2004/03/07 02:36:45

  Modified:    wss4j/test/wssec TestWSSecurity.java TestWSSecurity2.java
  Added:       wss4j/test/wssec TestWSSecurity12.java
  Log:
  Added test for manual selecting DSA/SHA signature and test for
  automatic signtaure algo detection.
  
  Revision  Changes    Path
  1.3       +1 -0      ws-fx/wss4j/test/wssec/TestWSSecurity.java
  
  Index: TestWSSecurity.java
  ===================================================================
  RCS file: /home/cvs/ws-fx/wss4j/test/wssec/TestWSSecurity.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TestWSSecurity.java	29 Feb 2004 12:32:22 -0000	1.2
  +++ TestWSSecurity.java	7 Mar 2004 10:36:44 -0000	1.3
  @@ -176,6 +176,7 @@
   		log.info("After Signing ISDirect....");
   		verify(signedDoc);
   	}
  +
       /**
        * Test that signs (twice) and verifies a WS-Security envelope.
        * The test uses the IssuerSerial key identifier type.
  
  
  
  1.2       +49 -4     ws-fx/wss4j/test/wssec/TestWSSecurity2.java
  
  Index: TestWSSecurity2.java
  ===================================================================
  RCS file: /home/cvs/ws-fx/wss4j/test/wssec/TestWSSecurity2.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TestWSSecurity2.java	13 Feb 2004 20:43:09 -0000	1.1
  +++ TestWSSecurity2.java	7 Mar 2004 10:36:44 -0000	1.2
  @@ -23,6 +23,7 @@
   import org.apache.axis.Message;
   import org.apache.axis.MessageContext;
   import org.apache.axis.client.AxisClient;
  +import org.apache.axis.utils.XMLUtils;
   import org.apache.axis.configuration.NullProvider;
   import org.apache.axis.message.SOAPEnvelope;
   import org.apache.commons.logging.Log;
  @@ -43,6 +44,7 @@
   import java.io.ByteArrayInputStream;
   import java.io.IOException;
   import java.io.InputStream;
  +import java.io.PrintWriter;
   
   import java.util.Vector;
   
  @@ -123,12 +125,14 @@
       }
   
       /**
  -     * Test that encrypt and decrypt a WS-Security envelope
  +     * Test that encrypt and decrypt a WS-Security envelope.
  +     * This test uses the RSA_15 alogrithm to transport (wrap) the symmetric
  +     * key.
        * <p/>
        * 
        * @throws Exception Thrown when there is any problem in signing or verification
        */
  -    public void testEncryptionDecryption() throws Exception {
  +    public void testEncryptionDecryptionRSA15() throws Exception {
           SOAPEnvelope unsignedEnvelope = message.getSOAPEnvelope();
           SOAPEnvelope envelope = null;
           WSEncryptBody builder = new WSEncryptBody();
  @@ -148,6 +152,10 @@
            */
   
           Message encryptedMsg = (Message) AxisUtil.toSOAPMessage(encryptedDoc);
  +		if (log.isDebugEnabled()) {
  +			log.debug("Encrypted message, RSA-15 keytransport, 3DES:");
  +			XMLUtils.PrettyElementToWriter(encryptedMsg.getSOAPEnvelope().getAsDOM(), new PrintWriter(System.out));
  +		}
           String encryptedString = encryptedMsg.getSOAPPartAsString();
           assertTrue(encryptedString.indexOf("LogTestService2") == -1 ? true : false);
           encryptedDoc = encryptedMsg.getSOAPEnvelope().getAsDocument();
  @@ -169,16 +177,53 @@
           builder.setParts(parts);
           unsignedEnvelope = message.getSOAPEnvelope();
           doc = unsignedEnvelope.getAsDocument();
  -        log.info("Before Encryption AES 128....");
  +        log.info("Before Encryption AES 128/RSA-15....");
           encryptedDoc = builder.build(doc, crypto);
  -        log.info("After Encryption AES 128....");
  +        log.info("After Encryption AES 128/RSA-15....");
   	    encryptedMsg = (Message) AxisUtil.toSOAPMessage(encryptedDoc);
  +		if (log.isDebugEnabled()) {
  +			log.debug("Encrypted message, RSA-15 keytransport, AES 128:");
  +			XMLUtils.PrettyElementToWriter(encryptedMsg.getSOAPEnvelope().getAsDOM(), new PrintWriter(System.out));
  +		}
           encryptedString = encryptedMsg.getSOAPPartAsString();
           assertTrue(encryptedString.indexOf("LogTestService2") == -1 ? true : false);
           encryptedDoc = encryptedMsg.getSOAPEnvelope().getAsDocument();
           verify(encryptedDoc);
       }
   
  +	/**
  +	 * Test that encrypt and decrypt a WS-Security envelope.
  +	 * This test uses the RSA OAEP alogrithm to transport (wrap) the symmetric
  +	 * key.
  +	 * <p/>
  +	 * 
  +	 * @throws Exception Thrown when there is any problem in signing or verification
  +	 *
  + 	public void testEncryptionDecryptionOAEP() throws Exception {
  +		SOAPEnvelope unsignedEnvelope = message.getSOAPEnvelope();
  +		SOAPEnvelope envelope = null;
  +		WSEncryptBody builder = new WSEncryptBody();
  +		builder.setUserInfo("16c73ab6-b892-458f-abf5-2f875f74882e");
  +		builder.setKeyIdentifierType(WSConstants.X509_KEY_IDENTIFIER);
  +		builder.setKeyEnc(WSConstants.KEYTRANSPORT_RSAOEP);
  +		Document doc = unsignedEnvelope.getAsDocument();
  +		log.info("Before Encryption Triple DES/RSA-OAEP....");
  +		Document encryptedDoc = builder.build(doc, crypto);
  +		log.info("After Encryption Triple DES/RSA-OAEP....");
  +
  +		Message encryptedMsg = (Message) AxisUtil.toSOAPMessage(encryptedDoc);
  +		if (log.isDebugEnabled()) {
  +			log.debug("Encrypted message, RSA-OAEP keytransport, 3DES:");
  +			XMLUtils.PrettyElementToWriter(encryptedMsg.getSOAPEnvelope().getAsDOM(), new PrintWriter(System.out));
  +		}
  +		String encryptedString = encryptedMsg.getSOAPPartAsString();
  +		assertTrue(encryptedString.indexOf("LogTestService2") == -1 ? true : false);
  +		encryptedDoc = encryptedMsg.getSOAPEnvelope().getAsDocument();
  +		verify(encryptedDoc);
  +
  +	}
  +	*/
  +	
       /**
        * Verifies the soap envelope
        * <p/>
  
  
  
  1.1                  ws-fx/wss4j/test/wssec/TestWSSecurity12.java
  
  Index: TestWSSecurity12.java
  ===================================================================
  /*
   * Copyright  2003-2004 The Apache Software Foundation.
   *
   *  Licensed 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.
   *
   */
  package wssec;
  
  import junit.framework.Test;
  import junit.framework.TestCase;
  import junit.framework.TestSuite;
  import org.apache.axis.Message;
  import org.apache.axis.MessageContext;
  import org.apache.axis.utils.XMLUtils;
  import org.apache.axis.client.AxisClient;
  import org.apache.axis.configuration.NullProvider;
  import org.apache.axis.message.SOAPEnvelope;
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  import org.apache.ws.axis.security.util.AxisUtil;
  import org.apache.ws.security.WSSecurityEngine;
  import org.apache.ws.security.WSConstants;
  import org.apache.ws.security.components.crypto.Crypto;
  import org.apache.ws.security.components.crypto.CryptoFactory;
  import org.apache.ws.security.message.WSSignEnvelope;
  import org.w3c.dom.Document;
  
  import org.apache.xml.security.signature.XMLSignature;
  
  import java.io.ByteArrayInputStream;
  import java.io.InputStream;
  import java.io.PrintWriter;
  
  
  /**
   * WS-Security Test Case
   * <p/>
   * 
   * @author Davanum Srinivas (dims@yahoo.com)
   * @author Werner Dittmann (Werner.Dittmann@siemens.com)
   */
  public class TestWSSecurity12 extends TestCase {
      private static Log log = LogFactory.getLog(TestWSSecurity12.class);
      static final String NS = "http://www.w3.org/2000/09/xmldsig#";
      static final String soapMsg = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">" + "<SOAP-ENV:Body>" + "<add xmlns=\"http://ws.apache.org/counter/counter_port_type\">" + "<value xmlns=\"\">15</value>" + "</add>" + "</SOAP-ENV:Body>\r\n       \r\n" + "</SOAP-ENV:Envelope>";
      static final WSSecurityEngine secEngine = new WSSecurityEngine();
      static final Crypto crypto = CryptoFactory.getInstance("cryptoSKI.properties");
  
      MessageContext msgContext;
      SOAPEnvelope unsignedEnvelope;
  
      /**
       * TestWSSecurity constructor
       * <p/>
       * 
       * @param name name of the test
       */
      public TestWSSecurity12(String name) {
          super(name);
      }
  
      /**
       * JUnit suite
       * <p/>
       * 
       * @return a junit test suite
       */
      public static Test suite() {
          return new TestSuite(TestWSSecurity12.class);
      }
  
      /**
       * Main method
       * <p/>
       * 
       * @param args command line args
       */
      public static void main(String[] args) {
          junit.textui.TestRunner.run(suite());
      }
  
      /**
       * Setup method
       * <p/>
       * 
       * @throws java.lang.Exception Thrown when there is a problem in setup
       */
      protected void setUp() throws Exception {
          AxisClient tmpEngine = new AxisClient(new NullProvider());
          msgContext = new MessageContext(tmpEngine);
          unsignedEnvelope = getSOAPEnvelope();
      }
  
      /**
       * Constructs a soap envelope
       * <p/>
       * 
       * @return soap envelope
       * @throws java.lang.Exception if there is any problem constructing the soap envelope
       */
      protected SOAPEnvelope getSOAPEnvelope() throws Exception {
          InputStream in = new ByteArrayInputStream(soapMsg.getBytes());
          Message msg = new Message(in);
          msg.setMessageContext(msgContext);
          return msg.getSOAPEnvelope();
      }
  
      /**
       * Test that signs and verifies a WS-Security envelope using SubjectKeyIdentifier.
       * This test uses the SubjectKeyIdentifier to identify the certificate. It
       * uses the Direct version, that is it embedds the certificate in the message.
       * <p/>
       * 
       * @throws java.lang.Exception Thrown when there is any problem in signing or verification
       */
      public void testX509SignatureDSA_SKIDirect() throws Exception {
          SOAPEnvelope envelope = null;
          WSSignEnvelope builder = new WSSignEnvelope();
          builder.setUserInfo("wss4jcertDSA", "security");
  		builder.setKeyIdentifierType(WSConstants.SKI_KEY_IDENTIFIER_DIRECT);
  		builder.setSignatureAlgorithm(XMLSignature.ALGO_ID_SIGNATURE_DSA);
  		
          // builder.setUserInfo("john", "keypass");
          log.info("Before SigningDSA_SKIDirect....");
          Document doc = unsignedEnvelope.getAsDocument();
          Document signedDoc = builder.build(doc, crypto);
  
          /*
           * convert the resulting document into a message first. The toSOAPMessage()
           * mehtod performs the necessary c14n call to properly set up the signed
           * document and convert it into a SOAP message. After that we extract it
           * as a document again for further processing.
           */
  
          Message signedMsg = (Message) AxisUtil.toSOAPMessage(signedDoc);
  		if (log.isDebugEnabled()) {
  			log.debug("Signed message with SKI_DASDirect key identifier:");
  			XMLUtils.PrettyElementToWriter(signedMsg.getSOAPEnvelope().getAsDOM(), new PrintWriter(System.out));
  		}
  
          signedDoc = signedMsg.getSOAPEnvelope().getAsDocument();
          log.info("After SigningDSA_SKIDirect....");
          verify(signedDoc);
      }
  
  	/**
  	 * Test that signs and verifies a WS-Security envelope using SubjectKeyIdentifier.
  	 * This test uses the SubjectKeyIdentifier to identify the certificate. 
  	 * It gets a certificate with a DSA public key algo to sign, WSSignEnvelope shall
  	 * detect the algo and set the signature algo accordingly.
  	 * <p/>
  	 * 
  	 * @throws java.lang.Exception Thrown when there is any problem in signing or verification
  	 */
  	public void testX509SignatureDSA_Autodetect() throws Exception {
  		SOAPEnvelope envelope = null;
  		WSSignEnvelope builder = new WSSignEnvelope();
  		builder.setUserInfo("wss4jcertDSA", "security");
  		builder.setKeyIdentifierType(WSConstants.SKI_KEY_IDENTIFIER);
  		
  		// builder.setUserInfo("john", "keypass");
  		log.info("Before SigningDSA_Autodetect....");
  		Document doc = unsignedEnvelope.getAsDocument();
  		Document signedDoc = builder.build(doc, crypto);
  
  		/*
  		 * convert the resulting document into a message first. The toSOAPMessage()
  		 * mehtod performs the necessary c14n call to properly set up the signed
  		 * document and convert it into a SOAP message. After that we extract it
  		 * as a document again for further processing.
  		 */
  
  		Message signedMsg = (Message) AxisUtil.toSOAPMessage(signedDoc);
  		if (log.isDebugEnabled()) {
  			log.debug("Signed message with DSA_Autodetect:");
  			XMLUtils.PrettyElementToWriter(signedMsg.getSOAPEnvelope().getAsDOM(), new PrintWriter(System.out));
  		}
  
  		signedDoc = signedMsg.getSOAPEnvelope().getAsDocument();
  		log.info("After SigningDSA_Autodetect....");
  		verify(signedDoc);
  	}
  
  	/**
  	 * Test that signs and verifies a WS-Security envelope using SubjectKeyIdentifier.
  	 * This test uses the SubjectKeyIdentifier to identify the certificate. 
  	 * It gets a certificate with a RSA public key algo to sign, WSSignEnvelope shall
  	 * detect the algo and set the signature algo accordingly.
  	 * <p/>
  	 * 
  	 * @throws java.lang.Exception Thrown when there is any problem in signing or verification
  	 */
  	public void testX509SignatureRSA_Autodetect() throws Exception {
  		SOAPEnvelope envelope = null;
  		WSSignEnvelope builder = new WSSignEnvelope();
  		builder.setUserInfo("wss4jcert", "security");
  		builder.setKeyIdentifierType(WSConstants.SKI_KEY_IDENTIFIER);
  		
  		// builder.setUserInfo("john", "keypass");
  		log.info("Before SigningRSA_Autodetect....");
  		Document doc = unsignedEnvelope.getAsDocument();
  		Document signedDoc = builder.build(doc, crypto);
  
  		/*
  		 * convert the resulting document into a message first. The toSOAPMessage()
  		 * mehtod performs the necessary c14n call to properly set up the signed
  		 * document and convert it into a SOAP message. After that we extract it
  		 * as a document again for further processing.
  		 */
  
  		Message signedMsg = (Message) AxisUtil.toSOAPMessage(signedDoc);
  		if (log.isDebugEnabled()) {
  			log.debug("Signed message with RSA Autodetect:");
  			XMLUtils.PrettyElementToWriter(signedMsg.getSOAPEnvelope().getAsDOM(), new PrintWriter(System.out));
  		}
  
  		signedDoc = signedMsg.getSOAPEnvelope().getAsDocument();
  		log.info("After SigningRSA_Autodetect....");
  		verify(signedDoc);
  	}
  
      /**
       * Test that signs (twice) and verifies a WS-Security envelope
       * <p/>
       * 
       * @throws java.lang.Exception Thrown when there is any problem in signing or verification
       *
      public void testDoubleX509SignatureSKIDirect() throws Exception {
          SOAPEnvelope envelope = null;
          WSSignEnvelope builder = new WSSignEnvelope();
          builder.setUserInfo("wss4jcert", "security");
  		builder.setKeyIdentifierType(WSConstants.SKI_KEY_IDENTIFIER_DIRECT);
  
          // builder.setUserInfo("john", "keypass");
          Document doc = unsignedEnvelope.getAsDocument();
          Document signedDoc = builder.build(doc, crypto);
          Document signedDoc1 = builder.build(signedDoc, crypto);
          verify(signedDoc1);
      }
  	*/
      
      /**
       * Verifies the soap envelope
       * 
       * @param env soap envelope
       * @throws java.lang.Exception Thrown when there is a problem in verification
       */
      private void verify(Document doc) throws Exception {
          secEngine.processSecurityHeader(doc, null, null, crypto);
      }
  }