Package com.canoo.webtest.security

Source Code of com.canoo.webtest.security.SunJsseBaseConnectionInitializer

// Copyright � 2002-2005 Canoo Engineering AG, Switzerland.
package com.canoo.webtest.security;

import com.canoo.webtest.engine.Configuration;
import org.apache.log4j.Logger;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;

/**
* Initializer for using https with basic authentication, i\.e\.\ no keystore processing is used. Uses the sun
* truststore for server certificate checking. Hostname verification accepts all hostnames. (you may want to override
* this)<p> See also <a href="http://java.sun.com/j2se/1.4.2/docs/guide/security/jsse/JSSERefGuide.html">JSSE
* Reference</a>
*
* @author Carsten Seibert, Dierk Koenig
*/
public class SunJsseBaseConnectionInitializer extends AbstractConnectionInitializer
{
    private static final Logger LOG = Logger.getLogger(SunJsseBaseConnectionInitializer.class);

    /**
     * Doing the initialization for https heavily relies on side effects in shared data, i.e. System properties and static
     * fields in java.security.* and java.net.* .
     */
    public void initializeConnection(final Configuration config) throws ConnectionInitializationException {
        LOG.debug("Using Custom ConnectionInitializer: " + getClass().getName());
        if (isProtocolHttps(config)) {
            if (LOG.isDebugEnabled()) {
                System.setProperty("javax.net.debug", "all");
            }
            logProtocolConfiguration(config);

            installJsseProviderIfRequired(SUN_JSSE_PROVIDER_CLASS);
            setSystemProperty(PROTOCOL_HANDLER_KEY, SUN_SSL_PROTOCOL_HANDLER_PACKAGE);
            attemptSetSystemProperty(config, TRUST_STORE_KEY, PROPERTY_TRUSTSTORE_FILE);
            attemptSetSystemProperty(config, TRUST_STORE_PASSWORD_KEY, PROPERTY_TRUSTSTORE_PASSPHRASE);

            // Ordering is important! The trust store is read upon connectionHandler
            // initialization which occurs implicitly when the HostnameVerifier is
            // installed.
            installTrustAndKeyManager(config);
            installHostnameVerifier(config);
        }
    }

    private static void attemptSetSystemProperty(final Configuration config, final String propertyKey, final String propertyName)
            throws ConnectionInitializationException {
        String property = getExternalProperty(config, propertyName);
        if (property == null) {
            throw new ConnectionInitializationException("Property not set: " + propertyName);
        }
        setSystemProperty(propertyKey, property);
    }

    /**
     * Install a customized HostnameVerifier in order to handle mismatches between common name used in the certificate
     * and the actual hostname specified in the URL. Only required if protocol is HTTPS.
     *
     * @param config The current test context.
     */
    protected void installHostnameVerifier(final Configuration config) {
        LOG.info("Installing HostnameVerifier");
        HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier()
        {
            public boolean verify(String hostname, SSLSession sslSession) {
                LOG.info("Granting access for " + hostname);
                return true;
            }
        });
    }

    protected void installTrustAndKeyManager(final Configuration config) throws ConnectionInitializationException {// not needed for the standard case
        LOG.debug("No Trust and no Key manager installed.");
    }

    protected void logProtocolConfiguration(final Configuration config) {
        logProperty(config, PROPERTY_TRUSTSTORE_FILE);
        logProperty(config, PROPERTY_TRUSTSTORE_PASSPHRASE);
    }

}
TOP

Related Classes of com.canoo.webtest.security.SunJsseBaseConnectionInitializer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.