You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by tr...@apache.org on 2007/11/29 06:56:21 UTC

svn commit: r599286 - in /mina/trunk/core/src: main/java/org/apache/mina/filter/ssl/ test/java/org/apache/mina/filter/ssl/ test/resources/org/ test/resources/org/apache/ test/resources/org/apache/mina/ test/resources/org/apache/mina/filter/ test/resour...

Author: trustin
Date: Wed Nov 28 21:56:19 2007
New Revision: 599286

URL: http://svn.apache.org/viewvc?rev=599286&view=rev
Log:
* Added KeyStoreFactory (moved and modified from KeyStoreFactoryBean in integration-spring)
* Added SslContextFactory (moved and modified from SslContextFactoryBean in integration-spring)

Added:
    mina/trunk/core/src/main/java/org/apache/mina/filter/ssl/KeyStoreFactory.java   (with props)
    mina/trunk/core/src/main/java/org/apache/mina/filter/ssl/SslContextFactory.java   (with props)
    mina/trunk/core/src/test/java/org/apache/mina/filter/ssl/
    mina/trunk/core/src/test/java/org/apache/mina/filter/ssl/KeyStoreFactoryTest.java   (with props)
    mina/trunk/core/src/test/resources/org/
    mina/trunk/core/src/test/resources/org/apache/
    mina/trunk/core/src/test/resources/org/apache/mina/
    mina/trunk/core/src/test/resources/org/apache/mina/filter/
    mina/trunk/core/src/test/resources/org/apache/mina/filter/ssl/
    mina/trunk/core/src/test/resources/org/apache/mina/filter/ssl/keystore.cert   (with props)

Added: mina/trunk/core/src/main/java/org/apache/mina/filter/ssl/KeyStoreFactory.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/ssl/KeyStoreFactory.java?rev=599286&view=auto
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/filter/ssl/KeyStoreFactory.java (added)
+++ mina/trunk/core/src/main/java/org/apache/mina/filter/ssl/KeyStoreFactory.java Wed Nov 28 21:56:19 2007
@@ -0,0 +1,175 @@
+/*
+ *  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.
+ *
+ */
+package org.apache.mina.filter.ssl;
+
+import java.io.BufferedInputStream;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.NoSuchProviderException;
+import java.security.cert.CertificateException;
+
+/**
+ * A factory that creates and configures a new {@link KeyStore} instance.
+ *
+ * @author The Apache MINA Project (dev@mina.apache.org)
+ * @version $Rev$, $Date$
+ */
+public class KeyStoreFactory {
+    
+    private String type = "JKS";
+    private String provider = null;
+    private char[] password = null;
+    private byte[] data = null;
+
+    /**
+     * Creates a new {@link KeyStore}. This method will be called
+     * by the base class when Spring creates a bean using this FactoryBean.
+     *
+     * @return a new {@link KeyStore} instance.
+     */
+    public KeyStore newInstance() throws KeyStoreException, NoSuchProviderException, NoSuchAlgorithmException, CertificateException, IOException {
+        if (data == null) {
+            throw new IllegalStateException("data property is not set.");
+        }
+
+        KeyStore ks = null;
+        if (provider == null) {
+            ks = KeyStore.getInstance(type);
+        } else {
+            ks = KeyStore.getInstance(type, provider);
+        }
+
+        InputStream is = new ByteArrayInputStream(data);
+        try {
+            ks.load(is, password);
+        } finally {
+            try {
+                is.close();
+            } catch (IOException ignored) {
+            }
+        }
+
+        return ks;
+    }
+
+    /**
+     * Sets the type of key store to create. The default is to create a
+     * JKS key store.
+     *
+     * @param type the type to use when creating the key store.
+     * @throws IllegalArgumentException if the specified value is
+     *         <code>null</code>.
+     */
+    public void setType(String type) {
+        if (type == null) {
+            throw new NullPointerException("type");
+        }
+        this.type = type;
+    }
+
+    /**
+     * Sets the key store password. If this value is <code>null</code> no
+     * password will be used to check the integrity of the key store.
+     *
+     * @param password the password or <code>null</code> if no password is
+     *        needed.
+     */
+    public void setPassword(String password) {
+        if (password != null) {
+            this.password = password.toCharArray();
+        } else {
+            this.password = null;
+        }
+    }
+
+    /**
+     * Sets the name of the provider to use when creating the key store. The
+     * default is to use the platform default provider.
+     *
+     * @param provider the name of the provider, e.g. <tt>"SUN"</tt>.
+     */
+    public void setProvider(String provider) {
+        this.provider = provider;
+    }
+
+    /**
+     * Sets the data which contains the key store.
+     *
+     * @param data the byte array that contains the key store
+     */
+    public void setData(byte[] data) {
+        byte[] copy = new byte[data.length];
+        System.arraycopy(data, 0, copy, 0, data.length);
+        this.data = copy;
+    }
+    
+    /**
+     * Sets the data which contains the key store.
+     *
+     * @param dataStream the {@link InputStream} that contains the key store
+     */
+    public void setData(InputStream dataStream) throws IOException {
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        try {
+            for (;;) {
+                int data = dataStream.read();
+                if (data < 0) {
+                    break;
+                }
+                
+                out.write(data);
+            }
+            
+            setData(out.toByteArray());
+        } finally {
+            try {
+                dataStream.close();
+            } catch (IOException e) {
+                // Ignore.
+            }
+        }
+    }
+    
+    /**
+     * Sets the data which contains the key store.
+     *
+     * @param dataFile the {@link File} that contains the key store
+     */
+    public void setData(File dataFile) throws IOException {
+        setData(new BufferedInputStream(new FileInputStream(dataFile)));
+    }
+    
+    /**
+     * Sets the data which contains the key store.
+     *
+     * @param dataUrl the {@link URL} that contains the key store.
+     */
+    public void setData(URL dataUrl) throws IOException {
+        setData(dataUrl.openStream());
+    }
+}

Propchange: mina/trunk/core/src/main/java/org/apache/mina/filter/ssl/KeyStoreFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: mina/trunk/core/src/main/java/org/apache/mina/filter/ssl/KeyStoreFactory.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: mina/trunk/core/src/main/java/org/apache/mina/filter/ssl/SslContextFactory.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/ssl/SslContextFactory.java?rev=599286&view=auto
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/filter/ssl/SslContextFactory.java (added)
+++ mina/trunk/core/src/main/java/org/apache/mina/filter/ssl/SslContextFactory.java Wed Nov 28 21:56:19 2007
@@ -0,0 +1,422 @@
+/*
+ *  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.
+ *
+ */
+package org.apache.mina.filter.ssl;
+
+import java.security.KeyStore;
+import java.security.SecureRandom;
+
+import javax.net.ssl.KeyManager;
+import javax.net.ssl.KeyManagerFactory;
+import javax.net.ssl.ManagerFactoryParameters;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSessionContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.TrustManagerFactory;
+
+/**
+ * A factory that creates and configures a new {@link SSLContext}.
+ * <p>
+ * If no properties are set the returned {@link SSLContext} will
+ * be equivalent to what the following creates:
+ * <pre>
+ *      SSLContext c = SSLContext.getInstance( "TLS" );
+ *      c.init(null, null, null);
+ * </pre>
+ * </p>
+ * <p>
+ * Use the properties prefixed with <code>keyManagerFactory</code> to control
+ * the creation of the {@link KeyManager} to be used.
+ * </p>
+ * <p>
+ * Use the properties prefixed with <code>trustManagerFactory</code> to control
+ * the creation of the {@link TrustManagerFactory} to be used.
+ * </p>
+ *
+ * @author The Apache MINA Project (dev@mina.apache.org)
+ * @version $Rev$, $Date$
+ */
+public class SslContextFactory {
+    
+    private String provider = null;
+    private String protocol = "TLS";
+    private SecureRandom secureRandom = null;
+    private KeyStore keyManagerFactoryKeyStore = null;
+    private char[] keyManagerFactoryKeyStorePassword = null;
+    private KeyManagerFactory keyManagerFactory = null;
+    private String keyManagerFactoryAlgorithm = null;
+    private String keyManagerFactoryProvider = null;
+    private boolean keyManagerFactoryAlgorithmUseDefault = false;
+    private KeyStore trustManagerFactoryKeyStore = null;
+    private TrustManagerFactory trustManagerFactory = null;
+    private String trustManagerFactoryAlgorithm = null;
+    private String trustManagerFactoryProvider = null;
+    private boolean trustManagerFactoryAlgorithmUseDefault = false;
+    private ManagerFactoryParameters trustManagerFactoryParameters = null;
+    private int clientSessionCacheSize = -1;
+    private int clientSessionTimeout = -1;
+    private int serverSessionCacheSize = -1;
+    private int serverSessionTimeout = -1;
+
+    public SSLContext newInstance() throws Exception {
+        KeyManagerFactory kmf = this.keyManagerFactory;
+        TrustManagerFactory tmf = this.trustManagerFactory;
+
+        if (kmf == null) {
+            String algorithm = keyManagerFactoryAlgorithm;
+            if (algorithm == null && keyManagerFactoryAlgorithmUseDefault) {
+                algorithm = KeyManagerFactory.getDefaultAlgorithm();
+            }
+            if (algorithm != null) {
+                if (keyManagerFactoryProvider == null) {
+                    kmf = KeyManagerFactory.getInstance(algorithm);
+                } else {
+                    kmf = KeyManagerFactory.getInstance(algorithm,
+                            keyManagerFactoryProvider);
+                }
+            }
+        }
+
+        if (tmf == null) {
+            String algorithm = trustManagerFactoryAlgorithm;
+            if (algorithm == null && trustManagerFactoryAlgorithmUseDefault) {
+                algorithm = TrustManagerFactory.getDefaultAlgorithm();
+            }
+            if (algorithm != null) {
+                if (trustManagerFactoryProvider == null) {
+                    tmf = TrustManagerFactory.getInstance(algorithm);
+                } else {
+                    tmf = TrustManagerFactory.getInstance(algorithm,
+                            trustManagerFactoryProvider);
+                }
+            }
+        }
+
+        KeyManager[] keyManagers = null;
+        if (kmf != null) {
+            kmf.init(keyManagerFactoryKeyStore,
+                    keyManagerFactoryKeyStorePassword);
+            keyManagers = kmf.getKeyManagers();
+        }
+        TrustManager[] trustManagers = null;
+        if (tmf != null) {
+            if (trustManagerFactoryParameters != null) {
+                tmf.init(trustManagerFactoryParameters);
+            } else {
+                tmf.init(trustManagerFactoryKeyStore);
+            }
+            trustManagers = tmf.getTrustManagers();
+        }
+
+        SSLContext context = null;
+        if (provider == null) {
+            context = SSLContext.getInstance(protocol);
+        } else {
+            context = SSLContext.getInstance(protocol, provider);
+        }
+
+        context.init(keyManagers, trustManagers, secureRandom);
+
+        if (clientSessionCacheSize >= 0) {
+            context.getClientSessionContext().setSessionCacheSize(
+                    clientSessionCacheSize);
+        }
+
+        if (clientSessionTimeout >= 0) {
+            context.getClientSessionContext().setSessionTimeout(
+                    clientSessionTimeout);
+        }
+
+        if (serverSessionCacheSize >= 0) {
+            context.getServerSessionContext().setSessionCacheSize(
+                    serverSessionCacheSize);
+        }
+
+        if (serverSessionTimeout >= 0) {
+            context.getServerSessionContext().setSessionTimeout(
+                    serverSessionTimeout);
+        }
+
+        return context;
+    }
+
+    /**
+     * Sets the provider of the new {@link SSLContext}. The default value is
+     * <tt>null</tt>, which means the default provider will be used.
+     * 
+     * @param provider the name of the {@link SSLContext} provider
+     */
+    public void setProvider(String provider) {
+        this.provider = provider;
+    }
+
+    /**
+     * Sets the protocol to use when creating the {@link SSLContext}. The
+     * default is <code>TLS</code>.
+     *
+     * @param protocol the name of the protocol.
+     */
+    public void setProtocol(String protocol) {
+        if (protocol == null) {
+            throw new NullPointerException("protocol");
+        }
+        this.protocol = protocol;
+    }
+
+    /**
+     * If this is set to <code>true</code> while no {@link KeyManagerFactory}
+     * has been set using {@link #setKeyManagerFactory(KeyManagerFactory)} and
+     * no algorithm has been set using
+     * {@link #setKeyManagerFactoryAlgorithm(String)} the default algorithm
+     * return by {@link KeyManagerFactory#getDefaultAlgorithm()} will be used.
+     *
+     * @param useDefault
+     *            <code>true</code> or <code>false</code>.
+     */
+    public void setKeyManagerFactoryAlgorithmUseDefault(boolean useDefault) {
+        this.keyManagerFactoryAlgorithmUseDefault = useDefault;
+    }
+
+    /**
+     * If this is set to <code>true</code> while no {@link TrustManagerFactory}
+     * has been set using {@link #setTrustManagerFactory(TrustManagerFactory)} and
+     * no algorithm has been set using
+     * {@link #setTrustManagerFactoryAlgorithm(String)} the default algorithm
+     * return by {@link TrustManagerFactory#getDefaultAlgorithm()} will be used.
+     *
+     * @param useDefault <code>true</code> or <code>false</code>.
+     */
+    public void setTrustManagerFactoryAlgorithmUseDefault(boolean useDefault) {
+        this.trustManagerFactoryAlgorithmUseDefault = useDefault;
+    }
+
+    /**
+     * Sets the {@link KeyManagerFactory} to use. If this is set the properties
+     * which are used by this factory bean to create a {@link KeyManagerFactory}
+     * will all be ignored.
+     *
+     * @param factory the factory.
+     */
+    public void setKeyManagerFactory(KeyManagerFactory factory) {
+        this.keyManagerFactory = factory;
+    }
+
+    /**
+     * Sets the algorithm to use when creating the {@link KeyManagerFactory}
+     * using {@link KeyManagerFactory#getInstance(java.lang.String)} or
+     * {@link KeyManagerFactory#getInstance(java.lang.String, java.lang.String)}.
+     * <p>
+     * This property will be ignored if a {@link KeyManagerFactory} has been
+     * set directly using {@link #setKeyManagerFactory(KeyManagerFactory)}.
+     * </p>
+     * <p>
+     * If this property isn't set while no {@link KeyManagerFactory} has been
+     * set using {@link #setKeyManagerFactory(KeyManagerFactory)} and
+     * {@link #setKeyManagerFactoryAlgorithmUseDefault(boolean)} has been set to
+     * <code>true</code> the value returned
+     * by {@link KeyManagerFactory#getDefaultAlgorithm()} will be used instead.
+     * </p>
+     *
+     * @param algorithm the algorithm to use.
+     */
+    public void setKeyManagerFactoryAlgorithm(String algorithm) {
+        this.keyManagerFactoryAlgorithm = algorithm;
+    }
+
+    /**
+     * Sets the provider to use when creating the {@link KeyManagerFactory}
+     * using
+     * {@link KeyManagerFactory#getInstance(java.lang.String, java.lang.String)}.
+     * <p>
+     * This property will be ignored if a {@link KeyManagerFactory} has been
+     * set directly using {@link #setKeyManagerFactory(KeyManagerFactory)}.
+     * </p>
+     * <p>
+     * If this property isn't set and no {@link KeyManagerFactory} has been set
+     * using {@link #setKeyManagerFactory(KeyManagerFactory)}
+     * {@link KeyManagerFactory#getInstance(java.lang.String)} will be used
+     * to create the {@link KeyManagerFactory}.
+     * </p>
+     *
+     * @param provider the name of the provider.
+     */
+    public void setKeyManagerFactoryProvider(String provider) {
+        this.keyManagerFactoryProvider = provider;
+    }
+
+    /**
+     * Sets the {@link KeyStore} which will be used in the call to
+     * {@link KeyManagerFactory#init(java.security.KeyStore, char[])} when
+     * the {@link SSLContext} is created.
+     *
+     * @param keyStore the key store.
+     */
+    public void setKeyManagerFactoryKeyStore(KeyStore keyStore) {
+        this.keyManagerFactoryKeyStore = keyStore;
+    }
+
+    /**
+     * Sets the password which will be used in the call to
+     * {@link KeyManagerFactory#init(java.security.KeyStore, char[])} when
+     * the {@link SSLContext} is created.
+     *
+     * @param password the password. Use <code>null</code> to disable password.
+     */
+    public void setKeyManagerFactoryKeyStorePassword(String password) {
+        if (password != null) {
+            this.keyManagerFactoryKeyStorePassword = password.toCharArray();
+        } else {
+            this.keyManagerFactoryKeyStorePassword = null;
+        }
+    }
+
+    /**
+     * Sets the {@link TrustManagerFactory} to use. If this is set the
+     * properties which are used by this factory bean to create a
+     * {@link TrustManagerFactory} will all be ignored.
+     *
+     * @param factory
+     *            the factory.
+     */
+    public void setTrustManagerFactory(TrustManagerFactory factory) {
+        this.trustManagerFactory = factory;
+    }
+
+    /**
+     * Sets the algorithm to use when creating the {@link TrustManagerFactory}
+     * using {@link TrustManagerFactory#getInstance(java.lang.String)} or
+     * {@link TrustManagerFactory#getInstance(java.lang.String, java.lang.String)}.
+     * <p>
+     * This property will be ignored if a {@link TrustManagerFactory} has been
+     * set directly using {@link #setTrustManagerFactory(TrustManagerFactory)}.
+     * </p>
+     * <p>
+     * If this property isn't set while no {@link TrustManagerFactory} has been
+     * set using {@link #setTrustManagerFactory(TrustManagerFactory)} and
+     * {@link #setTrustManagerFactoryAlgorithmUseDefault(boolean)} has been set to
+     * <code>true</code> the value returned
+     * by {@link TrustManagerFactory#getDefaultAlgorithm()} will be used instead.
+     * </p>
+     *
+     * @param algorithm the algorithm to use.
+     */
+    public void setTrustManagerFactoryAlgorithm(String algorithm) {
+        this.trustManagerFactoryAlgorithm = algorithm;
+    }
+
+    /**
+     * Sets the {@link KeyStore} which will be used in the call to
+     * {@link TrustManagerFactory#init(java.security.KeyStore)} when
+     * the {@link SSLContext} is created.
+     * <p>
+     * This property will be ignored if {@link ManagerFactoryParameters} has been
+     * set directly using {@link #setTrustManagerFactoryParameters(ManagerFactoryParameters)}.
+     * </p>
+     *
+     * @param keyStore the key store.
+     */
+    public void setTrustManagerFactoryKeyStore(KeyStore keyStore) {
+        this.trustManagerFactoryKeyStore = keyStore;
+    }
+
+    /**
+     * Sets the {@link ManagerFactoryParameters} which will be used in the call to
+     * {@link TrustManagerFactory#init(javax.net.ssl.ManagerFactoryParameters)} when
+     * the {@link SSLContext} is created.
+     *
+     * @param parameters describing provider-specific trust material.
+     */
+    public void setTrustManagerFactoryParameters(
+            ManagerFactoryParameters parameters) {
+        this.trustManagerFactoryParameters = parameters;
+    }
+
+    /**
+     * Sets the provider to use when creating the {@link TrustManagerFactory}
+     * using
+     * {@link TrustManagerFactory#getInstance(java.lang.String, java.lang.String)}.
+     * <p>
+     * This property will be ignored if a {@link TrustManagerFactory} has been
+     * set directly using {@link #setTrustManagerFactory(TrustManagerFactory)}.
+     * </p>
+     * <p>
+     * If this property isn't set and no {@link TrustManagerFactory} has been set
+     * using {@link #setTrustManagerFactory(TrustManagerFactory)}
+     * {@link TrustManagerFactory#getInstance(java.lang.String)} will be used
+     * to create the {@link TrustManagerFactory}.
+     * </p>
+     *
+     * @param provider the name of the provider.
+     */
+    public void setTrustManagerFactoryProvider(String provider) {
+        this.trustManagerFactoryProvider = provider;
+    }
+
+    /**
+     * Sets the {@link SecureRandom} to use when initializing the
+     * {@link SSLContext}. The JVM's default will be used if this isn't set.
+     *
+     * @param secureRandom the {@link SecureRandom} or <code>null</code> if the
+     *        JVM's default should be used.
+     * @see SSLContext#init(javax.net.ssl.KeyManager[], javax.net.ssl.TrustManager[], java.security.SecureRandom)
+     */
+    public void setSecureRandom(SecureRandom secureRandom) {
+        this.secureRandom = secureRandom;
+    }
+
+    /**
+     * Sets the SSLSession cache size for the {@link SSLSessionContext} for use in client mode.
+     *
+     * @param size the new session cache size limit; zero means there is no limit.
+     * @see SSLSessionContext#setSessionCacheSize(int size)
+     */
+    public void setClientSessionCacheSize(int size) {
+        this.clientSessionCacheSize = size;
+    }
+
+    /**
+     * Set the SSLSession timeout limit for the {@link SSLSessionContext} for use in client mode.
+     *
+     * @param seconds the new session timeout limit in seconds; zero means there is no limit.
+     * @see SSLSessionContext#setSessionTimeout(int seconds)
+     */
+    public void setClientSessionTimeout(int seconds) {
+        this.clientSessionTimeout = seconds;
+    }
+
+    /**
+     * Sets the SSLSession cache size for the {@link SSLSessionContext} for use in server mode.
+     *
+     * @param serverSessionCacheSize the new session cache size limit; zero means there is no limit.
+     * @see SSLSessionContext#setSessionCacheSize(int)
+     */
+    public void setServerSessionCacheSize(int serverSessionCacheSize) {
+        this.serverSessionCacheSize = serverSessionCacheSize;
+    }
+
+    /**
+     * Set the SSLSession timeout limit for the {@link SSLSessionContext} for use in server mode.
+     *
+     * @param serverSessionTimeout the new session timeout limit in seconds; zero means there is no limit.
+     * @see SSLSessionContext#setSessionTimeout(int)
+     */
+    public void setServerSessionTimeout(int serverSessionTimeout) {
+        this.serverSessionTimeout = serverSessionTimeout;
+    }
+}

Propchange: mina/trunk/core/src/main/java/org/apache/mina/filter/ssl/SslContextFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: mina/trunk/core/src/main/java/org/apache/mina/filter/ssl/SslContextFactory.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: mina/trunk/core/src/test/java/org/apache/mina/filter/ssl/KeyStoreFactoryTest.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/test/java/org/apache/mina/filter/ssl/KeyStoreFactoryTest.java?rev=599286&view=auto
==============================================================================
--- mina/trunk/core/src/test/java/org/apache/mina/filter/ssl/KeyStoreFactoryTest.java (added)
+++ mina/trunk/core/src/test/java/org/apache/mina/filter/ssl/KeyStoreFactoryTest.java Wed Nov 28 21:56:19 2007
@@ -0,0 +1,73 @@
+/*
+ *  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.
+ *
+ */
+package org.apache.mina.filter.ssl;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.security.KeyStore;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@link KeyStoreFactory}.
+ *
+ * @author The Apache MINA Project (dev@mina.apache.org)
+ * @version $Rev$, $Date$
+ */
+public class KeyStoreFactoryTest extends TestCase {
+    public void testCreateInstanceFromResource() throws Exception {
+        // Test using default for now.
+        KeyStoreFactory factory = new KeyStoreFactory();
+        factory.setData(getClass().getResource("keystore.cert"));
+        factory.setPassword("boguspw");
+
+        KeyStore ks = factory.newInstance();
+
+        ks.getCertificate("bogus");
+        ks.getKey("bogus", "boguspw".toCharArray());
+    }
+
+    public void testCreateInstanceFromFile() throws Exception {
+        // Copy the keystore from the class path to a temporary file.
+        File file = File.createTempFile("keystoretest ", null);
+        file.deleteOnExit();
+        InputStream in = getClass().getResourceAsStream("keystore.cert");
+        OutputStream out = new FileOutputStream(file);
+        int b;
+        while ((b = in.read()) != -1) {
+            out.write(b);
+        }
+        in.close();
+        out.close();
+
+        // Test using default for now.
+        KeyStoreFactory factory = new KeyStoreFactory();
+        factory.setData(file);
+        factory.setPassword("boguspw");
+
+        KeyStore ks = factory.newInstance();
+
+        ks.getCertificate("bogus");
+        ks.getKey("bogus", "boguspw".toCharArray());
+    }
+
+}

Propchange: mina/trunk/core/src/test/java/org/apache/mina/filter/ssl/KeyStoreFactoryTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: mina/trunk/core/src/test/java/org/apache/mina/filter/ssl/KeyStoreFactoryTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: mina/trunk/core/src/test/resources/org/apache/mina/filter/ssl/keystore.cert
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/test/resources/org/apache/mina/filter/ssl/keystore.cert?rev=599286&view=auto
==============================================================================
Binary file - no diff available.

Propchange: mina/trunk/core/src/test/resources/org/apache/mina/filter/ssl/keystore.cert
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream