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