151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/* 251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. 351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This code is free software; you can redistribute it and/or modify it 651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * under the terms of the GNU General Public License version 2 only, as 751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * published by the Free Software Foundation. Oracle designates this 851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * particular file as subject to the "Classpath" exception as provided 951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * by Oracle in the LICENSE file that accompanied this code. 1051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 1151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This code is distributed in the hope that it will be useful, but WITHOUT 1251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 1351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * version 2 for more details (a copy is included in the LICENSE file that 1551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * accompanied this code). 1651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 1751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * You should have received a copy of the GNU General Public License version 1851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 2 along with this work; if not, write to the Free Software Foundation, 1951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 2051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 2151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 2251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * or visit www.oracle.com if you need additional information or have any 2351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * questions. 2451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 2551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 2651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskipackage javax.net.ssl; 2751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 2851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport java.security.*; 2951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport java.util.*; 3051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 3151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport sun.security.jca.GetInstance; 3251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 3351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/** 3451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Instances of this class represent a secure socket protocol 3551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * implementation which acts as a factory for secure socket 3651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * factories or <code>SSLEngine</code>s. This class is initialized 3751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * with an optional set of key and trust managers and source of 3851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * secure random bytes. 3951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 40fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * <p> Android provides the following <code>SSLContext</code> protocols: 41fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * <table> 42fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * <thead> 43fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * <tr> 44fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * <th>Name</th> 45fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * <th>Supported (API Levels)</th> 46fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * </tr> 47fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * </thead> 48fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * <tbody> 49fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * <tr> 50fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * <td>Default</td> 51fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * <td>10+</td> 52fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * </tr> 53fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * <tr> 54fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * <td>SSL</td> 55fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * <td>10+</td> 56fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * </tr> 57fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * <tr> 58fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * <td>SSLv3</td> 59fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * <td>10+</td> 60fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * </tr> 61fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * <tr> 62fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * <td>TLS</td> 63fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * <td>1+</td> 64fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * </tr> 65fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * <tr> 66fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * <td>TLSv1</td> 67fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * <td>10+</td> 68fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * </tr> 69fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * <tr> 70fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * <td>TLSv1.1</td> 71fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * <td>16+</td> 72fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * </tr> 73fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * <tr> 74fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * <td>TLSv1.2</td> 75fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * <td>16+</td> 76fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * </tr> 77fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * </tbody> 78fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * </table> 79fba165684d995ea7afe39bb1fc15a4d09beeba71Przemyslaw Szczepaniak * 8051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This protocol is described in the <a href= 81d2449bb576ad1e3a3877364e5e1ae28625f69e35Yi Kong * "{@docRoot}openjdk-redirect.html?v=8&path=/technotes/guides/security/StandardNames.html#SSLContext"> 8251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * SSLContext section</a> of the 8351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Java Cryptography Architecture Standard Algorithm Name Documentation. 8451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 8551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since 1.4 8651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 8751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskipublic class SSLContext { 8851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private final Provider provider; 8951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 9051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private final SSLContextSpi contextSpi; 9151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 9251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private final String protocol; 9351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 9451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 9551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Creates an SSLContext object. 9651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 9751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param contextSpi the delegate 9851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param provider the provider 9951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param protocol the protocol 10051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 10151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski protected SSLContext(SSLContextSpi contextSpi, Provider provider, 10251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski String protocol) { 10351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.contextSpi = contextSpi; 10451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.provider = provider; 10551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.protocol = protocol; 10651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 10751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 10851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private static SSLContext defaultContext; 10951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 11051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 11151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns the default SSL context. 11251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 11351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p>If a default context was set using the {@link #setDefault 11451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * SSLContext.setDefault()} method, it is returned. Otherwise, the first 11551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * call of this method triggers the call 11651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>SSLContext.getInstance("Default")</code>. 11751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * If successful, that object is made the default SSL context and returned. 11851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 11951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p>The default context is immediately 12051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * usable and does not require {@linkplain #init initialization}. 12151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 12251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the default SSL context 12351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws NoSuchAlgorithmException if the 12451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * {@link SSLContext#getInstance SSLContext.getInstance()} call fails 12551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since 1.6 12651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 12751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public static synchronized SSLContext getDefault() 12851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throws NoSuchAlgorithmException { 12951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (defaultContext == null) { 13051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski defaultContext = SSLContext.getInstance("Default"); 13151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 13251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return defaultContext; 13351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 13451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 13551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 13651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Sets the default SSL context. It will be returned by subsequent calls 13751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * to {@link #getDefault}. The default context must be immediately usable 13851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * and not require {@linkplain #init initialization}. 13951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 14051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param context the SSLContext 14151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws NullPointerException if context is null 14251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws SecurityException if a security manager exists and its 14351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>checkPermission</code> method does not allow 14451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>SSLPermission("setDefaultSSLContext")</code> 14551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since 1.6 14651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 14751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public static synchronized void setDefault(SSLContext context) { 14851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (context == null) { 14951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throw new NullPointerException(); 15051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 15151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski SecurityManager sm = System.getSecurityManager(); 15251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (sm != null) { 15351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski sm.checkPermission(new SSLPermission("setDefaultSSLContext")); 15451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 15551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski defaultContext = context; 15651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 15751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 15851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 15951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns a <code>SSLContext</code> object that implements the 16051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * specified secure socket protocol. 16151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 16251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> This method traverses the list of registered security Providers, 16351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * starting with the most preferred Provider. 16451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * A new SSLContext object encapsulating the 16551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * SSLContextSpi implementation from the first 16651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Provider that supports the specified protocol is returned. 16751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 16851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> Note that the list of registered providers may be retrieved via 16951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * the {@link Security#getProviders() Security.getProviders()} method. 17051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 17151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param protocol the standard name of the requested protocol. 17251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * See the SSLContext section in the <a href= 173d2449bb576ad1e3a3877364e5e1ae28625f69e35Yi Kong * "{@docRoot}openjdk-redirect.html?v=8&path=/technotes/guides/security/StandardNames.html#SSLContext"> 17451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Java Cryptography Architecture Standard Algorithm Name 17551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Documentation</a> 17651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * for information about standard protocol names. 17751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 17851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the new <code>SSLContext</code> object. 17951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 18051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @exception NoSuchAlgorithmException if no Provider supports a 18151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * TrustManagerFactorySpi implementation for the 18251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * specified protocol. 18351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @exception NullPointerException if protocol is null. 18451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 18551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.security.Provider 18651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 18751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public static SSLContext getInstance(String protocol) 18851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throws NoSuchAlgorithmException { 18951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski GetInstance.Instance instance = GetInstance.getInstance 19051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski ("SSLContext", SSLContextSpi.class, protocol); 19151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return new SSLContext((SSLContextSpi)instance.impl, instance.provider, 19251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski protocol); 19351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 19451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 19551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 19651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns a <code>SSLContext</code> object that implements the 19751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * specified secure socket protocol. 19851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 19951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> A new SSLContext object encapsulating the 20051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * SSLContextSpi implementation from the specified provider 20151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * is returned. The specified provider must be registered 20251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * in the security provider list. 20351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 20451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> Note that the list of registered providers may be retrieved via 20551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * the {@link Security#getProviders() Security.getProviders()} method. 20651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 20751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param protocol the standard name of the requested protocol. 20851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * See the SSLContext section in the <a href= 209d2449bb576ad1e3a3877364e5e1ae28625f69e35Yi Kong * "{@docRoot}openjdk-redirect.html?v=8&path=/technotes/guides/security/StandardNames.html#SSLContext"> 21051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Java Cryptography Architecture Standard Algorithm Name 21151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Documentation</a> 21251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * for information about standard protocol names. 21351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 21451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param provider the name of the provider. 21551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 21651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the new <code>SSLContext</code> object. 21751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 21851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws NoSuchAlgorithmException if a SSLContextSpi 21951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * implementation for the specified protocol is not 22051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * available from the specified provider. 22151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 22251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws NoSuchProviderException if the specified provider is not 22351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * registered in the security provider list. 22451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 22551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws IllegalArgumentException if the provider name is null or empty. 22651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws NullPointerException if protocol is null. 22751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 22851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.security.Provider 22951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 23051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public static SSLContext getInstance(String protocol, String provider) 23151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throws NoSuchAlgorithmException, NoSuchProviderException { 23251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski GetInstance.Instance instance = GetInstance.getInstance 23351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski ("SSLContext", SSLContextSpi.class, protocol, provider); 23451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return new SSLContext((SSLContextSpi)instance.impl, instance.provider, 23551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski protocol); 23651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 23751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 23851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 23951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns a <code>SSLContext</code> object that implements the 24051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * specified secure socket protocol. 24151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 24251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> A new SSLContext object encapsulating the 24351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * SSLContextSpi implementation from the specified Provider 24451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * object is returned. Note that the specified Provider object 24551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * does not have to be registered in the provider list. 24651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 24751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param protocol the standard name of the requested protocol. 24851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * See the SSLContext section in the <a href= 249d2449bb576ad1e3a3877364e5e1ae28625f69e35Yi Kong * "{@docRoot}openjdk-redirect.html?v=8&path=/technotes/guides/security/StandardNames.html#SSLContext"> 25051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Java Cryptography Architecture Standard Algorithm Name 25151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Documentation</a> 25251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * for information about standard protocol names. 25351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 25451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param provider an instance of the provider. 25551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 25651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the new <code>SSLContext</code> object. 25751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 25851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws NoSuchAlgorithmException if a KeyManagerFactorySpi 25951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * implementation for the specified protocol is not available 26051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * from the specified Provider object. 26151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 26251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws IllegalArgumentException if the provider name is null. 26351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws NullPointerException if protocol is null. 26451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 26551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.security.Provider 26651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 26751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public static SSLContext getInstance(String protocol, Provider provider) 26851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throws NoSuchAlgorithmException { 26951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski GetInstance.Instance instance = GetInstance.getInstance 27051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski ("SSLContext", SSLContextSpi.class, protocol, provider); 27151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return new SSLContext((SSLContextSpi)instance.impl, instance.provider, 27251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski protocol); 27351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 27451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 27551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 27651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns the protocol name of this <code>SSLContext</code> object. 27751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 27851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p>This is the same name that was specified in one of the 27951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>getInstance</code> calls that created this 28051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>SSLContext</code> object. 28151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 28251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the protocol name of this <code>SSLContext</code> object. 28351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 28451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public final String getProtocol() { 28551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return this.protocol; 28651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 28751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 28851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 28951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns the provider of this <code>SSLContext</code> object. 29051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 29151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the provider of this <code>SSLContext</code> object 29251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 29351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public final Provider getProvider() { 29451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return this.provider; 29551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 29651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 29751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 29851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Initializes this context. Either of the first two parameters 29951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * may be null in which case the installed security providers will 30051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * be searched for the highest priority implementation of the 30151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * appropriate factory. Likewise, the secure random parameter may 30251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * be null in which case the default implementation will be used. 30351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <P> 30451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Only the first instance of a particular key and/or trust manager 30551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * implementation type in the array is used. (For example, only 30651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * the first javax.net.ssl.X509KeyManager in the array will be used.) 30751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 30851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param km the sources of authentication keys or null 30951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param tm the sources of peer authentication trust decisions or null 31051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param random the source of randomness for this generator or null 31151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws KeyManagementException if this operation fails 31251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 31351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public final void init(KeyManager[] km, TrustManager[] tm, 31451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski SecureRandom random) 31551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throws KeyManagementException { 31651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski contextSpi.engineInit(km, tm, random); 31751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 31851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 31951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 32051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns a <code>SocketFactory</code> object for this 32151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * context. 32251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 32351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the <code>SocketFactory</code> object 32451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws IllegalStateException if the SSLContextImpl requires 32551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * initialization and the <code>init()</code> has not been called 32651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 32751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public final SSLSocketFactory getSocketFactory() { 32851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return contextSpi.engineGetSocketFactory(); 32951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 33051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 33151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 33251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns a <code>ServerSocketFactory</code> object for 33351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * this context. 33451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 33551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the <code>ServerSocketFactory</code> object 33651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws IllegalStateException if the SSLContextImpl requires 33751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * initialization and the <code>init()</code> has not been called 33851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 33951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public final SSLServerSocketFactory getServerSocketFactory() { 34051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return contextSpi.engineGetServerSocketFactory(); 34151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 34251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 34351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 34451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Creates a new <code>SSLEngine</code> using this context. 34551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <P> 34651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Applications using this factory method are providing no hints 34751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * for an internal session reuse strategy. If hints are desired, 34851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * {@link #createSSLEngine(String, int)} should be used 34951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * instead. 35051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <P> 35151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Some cipher suites (such as Kerberos) require remote hostname 35251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * information, in which case this factory method should not be used. 35351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 35451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the <code>SSLEngine</code> object 35551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws UnsupportedOperationException if the underlying provider 35651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * does not implement the operation. 35751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws IllegalStateException if the SSLContextImpl requires 35851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * initialization and the <code>init()</code> has not been called 35951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since 1.5 36051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 36151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public final SSLEngine createSSLEngine() { 36251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski try { 36351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return contextSpi.engineCreateSSLEngine(); 36451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } catch (AbstractMethodError e) { 36551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski UnsupportedOperationException unsup = 36651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski new UnsupportedOperationException( 36751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski "Provider: " + getProvider() + 36851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski " doesn't support this operation"); 36951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski unsup.initCause(e); 37051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throw unsup; 37151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 37251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 37351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 37451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 37551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Creates a new <code>SSLEngine</code> using this context using 37651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * advisory peer information. 37751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <P> 37851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Applications using this factory method are providing hints 37951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * for an internal session reuse strategy. 38051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <P> 38151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Some cipher suites (such as Kerberos) require remote hostname 38251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * information, in which case peerHost needs to be specified. 38351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 38451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param peerHost the non-authoritative name of the host 38551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param peerPort the non-authoritative port 38651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the new <code>SSLEngine</code> object 38751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws UnsupportedOperationException if the underlying provider 38851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * does not implement the operation. 38951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws IllegalStateException if the SSLContextImpl requires 39051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * initialization and the <code>init()</code> has not been called 39151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since 1.5 39251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 39351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public final SSLEngine createSSLEngine(String peerHost, int peerPort) { 39451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski try { 39551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return contextSpi.engineCreateSSLEngine(peerHost, peerPort); 39651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } catch (AbstractMethodError e) { 39751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski UnsupportedOperationException unsup = 39851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski new UnsupportedOperationException( 39951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski "Provider: " + getProvider() + 40051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski " does not support this operation"); 40151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski unsup.initCause(e); 40251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throw unsup; 40351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 40451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 40551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 40651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 40751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns the server session context, which represents the set of 40851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * SSL sessions available for use during the handshake phase of 40951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * server-side SSL sockets. 41051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <P> 41151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This context may be unavailable in some environments, in which 41251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * case this method returns null. For example, when the underlying 41351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * SSL provider does not provide an implementation of SSLSessionContext 41451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * interface, this method returns null. A non-null session context 41551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * is returned otherwise. 41651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 41751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return server session context bound to this SSL context 41851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 41951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public final SSLSessionContext getServerSessionContext() { 42051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return contextSpi.engineGetServerSessionContext(); 42151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 42251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 42351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 42451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns the client session context, which represents the set of 42551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * SSL sessions available for use during the handshake phase of 42651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * client-side SSL sockets. 42751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <P> 42851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This context may be unavailable in some environments, in which 42951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * case this method returns null. For example, when the underlying 43051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * SSL provider does not provide an implementation of SSLSessionContext 43151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * interface, this method returns null. A non-null session context 43251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * is returned otherwise. 43351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 43451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return client session context bound to this SSL context 43551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 43651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public final SSLSessionContext getClientSessionContext() { 43751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return contextSpi.engineGetClientSessionContext(); 43851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 43951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 44051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 44151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns a copy of the SSLParameters indicating the default 44251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * settings for this SSL context. 44351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 44451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p>The parameters will always have the ciphersuites and protocols 44551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * arrays set to non-null values. 44651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 44751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return a copy of the SSLParameters object with the default settings 44851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws UnsupportedOperationException if the default SSL parameters 44951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * could not be obtained. 45051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since 1.6 45151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 45251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public final SSLParameters getDefaultSSLParameters() { 45351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return contextSpi.engineGetDefaultSSLParameters(); 45451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 45551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 45651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 45751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns a copy of the SSLParameters indicating the supported 45851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * settings for this SSL context. 45951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 46051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p>The parameters will always have the ciphersuites and protocols 46151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * arrays set to non-null values. 46251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 46351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return a copy of the SSLParameters object with the supported 46451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * settings 46551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws UnsupportedOperationException if the supported SSL parameters 46651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * could not be obtained. 46751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since 1.6 46851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 46951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public final SSLParameters getSupportedSSLParameters() { 47051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return contextSpi.engineGetSupportedSSLParameters(); 47151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 47251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 47351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski} 474