001    /*
002     *  Licensed to the Apache Software Foundation (ASF) under one
003     *  or more contributor license agreements.  See the NOTICE file
004     *  distributed with this work for additional information
005     *  regarding copyright ownership.  The ASF licenses this file
006     *  to you under the Apache License, Version 2.0 (the
007     *  "License"); you may not use this file except in compliance
008     *  with the License.  You may obtain a copy of the License at
009     *  
010     *    http://www.apache.org/licenses/LICENSE-2.0
011     *  
012     *  Unless required by applicable law or agreed to in writing,
013     *  software distributed under the License is distributed on an
014     *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015     *  KIND, either express or implied.  See the License for the
016     *  specific language governing permissions and limitations
017     *  under the License. 
018     *  
019     */
020    package org.apache.directory.shared.ldap.util;
021    
022    
023    import java.io.IOException;
024    import java.net.InetAddress;
025    import java.net.Socket;
026    import java.net.UnknownHostException;
027    import java.security.SecureRandom;
028    import java.security.cert.CertificateException;
029    import java.security.cert.X509Certificate;
030    
031    import javax.net.SocketFactory;
032    import javax.net.ssl.SSLContext;
033    import javax.net.ssl.SSLSocketFactory;
034    import javax.net.ssl.TrustManager;
035    import javax.net.ssl.X509TrustManager;
036    
037    
038    /**
039     * A SSLSocketFactory that accepts every certificat without validation.
040     *
041     * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
042     * @version $Rev$, $Date$
043     */
044    public class DummySSLSocketFactory extends SSLSocketFactory
045    {
046    
047        /** The default instance. */
048        private static SocketFactory instance;
049    
050    
051        /**
052         * Gets the default instance.
053         * 
054         * Note: This method is invoked from the JNDI framework when 
055         * creating a ldaps:// connection.
056         * 
057         * @return the default instance
058         */
059        public static SocketFactory getDefault()
060        {
061            if ( instance == null )
062            {
063                instance = new DummySSLSocketFactory();
064            }
065            return instance;
066        }
067    
068        /** The delegate. */
069        private SSLSocketFactory delegate;
070    
071    
072        /**
073         * Creates a new instance of DummySSLSocketFactory.
074         */
075        public DummySSLSocketFactory()
076        {
077            try
078            {
079                TrustManager tm = new X509TrustManager()
080                {
081                    public X509Certificate[] getAcceptedIssuers()
082                    {
083                        return new X509Certificate[0];
084                    }
085    
086    
087                    public void checkClientTrusted( X509Certificate[] arg0, String arg1 ) throws CertificateException
088                    {
089                    }
090    
091    
092                    public void checkServerTrusted( X509Certificate[] arg0, String arg1 ) throws CertificateException
093                    {
094                    }
095                };
096                TrustManager[] tma =
097                    { tm };
098                SSLContext sc = SSLContext.getInstance( "TLS" ); //$NON-NLS-1$
099                sc.init( null, tma, new SecureRandom() );
100                delegate = sc.getSocketFactory();
101            }
102            catch ( Exception e )
103            {
104                e.printStackTrace();
105            }
106        }
107    
108    
109        /**
110         * @see javax.net.ssl.SSLSocketFactory#getDefaultCipherSuites()
111         */
112        public String[] getDefaultCipherSuites()
113        {
114            return delegate.getDefaultCipherSuites();
115        }
116    
117    
118        /**
119         * @see javax.net.ssl.SSLSocketFactory#getSupportedCipherSuites()
120         */
121        public String[] getSupportedCipherSuites()
122        {
123            return delegate.getSupportedCipherSuites();
124        }
125    
126    
127        /**
128         * @see javax.net.ssl.SSLSocketFactory#createSocket(java.net.Socket, java.lang.String, int, boolean)
129         */
130        public Socket createSocket( Socket arg0, String arg1, int arg2, boolean arg3 ) throws IOException
131        {
132            try
133            {
134                return delegate.createSocket( arg0, arg1, arg2, arg3 );
135            }
136            catch ( IOException e )
137            {
138                e.printStackTrace();
139                throw e;
140            }
141        }
142    
143    
144        /**
145         * @see javax.net.SocketFactory#createSocket(java.lang.String, int)
146         */
147        public Socket createSocket( String arg0, int arg1 ) throws IOException, UnknownHostException
148        {
149            try
150            {
151                return delegate.createSocket( arg0, arg1 );
152            }
153            catch ( IOException e )
154            {
155                e.printStackTrace();
156                throw e;
157            }
158        }
159    
160    
161        /**
162         * @see javax.net.SocketFactory#createSocket(java.net.InetAddress, int)
163         */
164        public Socket createSocket( InetAddress arg0, int arg1 ) throws IOException
165        {
166            try
167            {
168                return delegate.createSocket( arg0, arg1 );
169            }
170            catch ( IOException e )
171            {
172                e.printStackTrace();
173                throw e;
174            }
175        }
176    
177    
178        /**
179         * @see javax.net.SocketFactory#createSocket(java.lang.String, int, java.net.InetAddress, int)
180         */
181        public Socket createSocket( String arg0, int arg1, InetAddress arg2, int arg3 ) throws IOException,
182            UnknownHostException
183        {
184            try
185            {
186                return delegate.createSocket( arg0, arg1, arg2, arg3 );
187            }
188            catch ( IOException e )
189            {
190                e.printStackTrace();
191                throw e;
192            }
193        }
194    
195    
196        /**
197         * @see javax.net.SocketFactory#createSocket(java.net.InetAddress, int, java.net.InetAddress, int)
198         */
199        public Socket createSocket( InetAddress arg0, int arg1, InetAddress arg2, int arg3 ) throws IOException
200        {
201            try
202            {
203                return delegate.createSocket( arg0, arg1, arg2, arg3 );
204            }
205            catch ( IOException e )
206            {
207                e.printStackTrace();
208                throw e;
209            }
210        }
211    }