Home » openjdk-7 » javax » net » ssl » [javadoc | source]

    1   /*
    2    * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
    3    * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    4    *
    5    * This code is free software; you can redistribute it and/or modify it
    6    * under the terms of the GNU General Public License version 2 only, as
    7    * published by the Free Software Foundation.  Oracle designates this
    8    * particular file as subject to the "Classpath" exception as provided
    9    * by Oracle in the LICENSE file that accompanied this code.
   10    *
   11    * This code is distributed in the hope that it will be useful, but WITHOUT
   12    * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   13    * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   14    * version 2 for more details (a copy is included in the LICENSE file that
   15    * accompanied this code).
   16    *
   17    * You should have received a copy of the GNU General Public License version
   18    * 2 along with this work; if not, write to the Free Software Foundation,
   19    * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   20    *
   21    * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
   22    * or visit www.oracle.com if you need additional information or have any
   23    * questions.
   24    */
   25   
   26   package javax.net.ssl;
   27   
   28   import java.security.AlgorithmConstraints;
   29   
   30   /**
   31    * Encapsulates parameters for an SSL/TLS connection. The parameters
   32    * are the list of ciphersuites to be accepted in an SSL/TLS handshake,
   33    * the list of protocols to be allowed, the endpoint identification
   34    * algorithm during SSL/TLS handshaking, the algorithm constraints and
   35    * whether SSL/TLS servers should request or require client authentication.
   36    * <p>
   37    * SSLParameters can be created via the constructors in this class.
   38    * Objects can also be obtained using the <code>getSSLParameters()</code>
   39    * methods in
   40    * {@link SSLSocket#getSSLParameters SSLSocket} and
   41    * {@link SSLServerSocket#getSSLParameters SSLServerSocket} and
   42    * {@link SSLEngine#getSSLParameters SSLEngine} or the
   43    * {@link SSLContext#getDefaultSSLParameters getDefaultSSLParameters()} and
   44    * {@link SSLContext#getSupportedSSLParameters getSupportedSSLParameters()}
   45    * methods in <code>SSLContext</code>.
   46    * <p>
   47    * SSLParameters can be applied to a connection via the methods
   48    * {@link SSLSocket#setSSLParameters SSLSocket.setSSLParameters()} and
   49    * {@link SSLServerSocket#setSSLParameters SSLServerSocket.setSSLParameters()}
   50    * and {@link SSLEngine#setSSLParameters SSLEngine.getSSLParameters()}.
   51    *
   52    * @see SSLSocket
   53    * @see SSLEngine
   54    * @see SSLContext
   55    *
   56    * @since 1.6
   57    */
   58   public class SSLParameters {
   59   
   60       private String[] cipherSuites;
   61       private String[] protocols;
   62       private boolean wantClientAuth;
   63       private boolean needClientAuth;
   64       private String identificationAlgorithm;
   65       private AlgorithmConstraints algorithmConstraints;
   66   
   67       /**
   68        * Constructs SSLParameters.
   69        * <p>
   70        * The cipherSuites and protocols values are set to <code>null</code>,
   71        * wantClientAuth and needClientAuth are set to <code>false</code>.
   72        */
   73       public SSLParameters() {
   74           // empty
   75       }
   76   
   77       /**
   78        * Constructs SSLParameters from the specified array of ciphersuites.
   79        * <p>
   80        * Calling this constructor is equivalent to calling the no-args
   81        * constructor followed by
   82        * <code>setCipherSuites(cipherSuites);</code>.
   83        *
   84        * @param cipherSuites the array of ciphersuites (or null)
   85        */
   86       public SSLParameters(String[] cipherSuites) {
   87           setCipherSuites(cipherSuites);
   88       }
   89   
   90       /**
   91        * Constructs SSLParameters from the specified array of ciphersuites
   92        * and protocols.
   93        * <p>
   94        * Calling this constructor is equivalent to calling the no-args
   95        * constructor followed by
   96        * <code>setCipherSuites(cipherSuites); setProtocols(protocols);</code>.
   97        *
   98        * @param cipherSuites the array of ciphersuites (or null)
   99        * @param protocols the array of protocols (or null)
  100        */
  101       public SSLParameters(String[] cipherSuites, String[] protocols) {
  102           setCipherSuites(cipherSuites);
  103           setProtocols(protocols);
  104       }
  105   
  106       private static String[] clone(String[] s) {
  107           return (s == null) ? null : s.clone();
  108       }
  109   
  110       /**
  111        * Returns a copy of the array of ciphersuites or null if none
  112        * have been set.
  113        *
  114        * @return a copy of the array of ciphersuites or null if none
  115        * have been set.
  116        */
  117       public String[] getCipherSuites() {
  118           return clone(cipherSuites);
  119       }
  120   
  121       /**
  122        * Sets the array of ciphersuites.
  123        *
  124        * @param cipherSuites the array of ciphersuites (or null)
  125        */
  126       public void setCipherSuites(String[] cipherSuites) {
  127           this.cipherSuites = clone(cipherSuites);
  128       }
  129   
  130       /**
  131        * Returns a copy of the array of protocols or null if none
  132        * have been set.
  133        *
  134        * @return a copy of the array of protocols or null if none
  135        * have been set.
  136        */
  137       public String[] getProtocols() {
  138           return clone(protocols);
  139       }
  140   
  141       /**
  142        * Sets the array of protocols.
  143        *
  144        * @param protocols the array of protocols (or null)
  145        */
  146       public void setProtocols(String[] protocols) {
  147           this.protocols = clone(protocols);
  148       }
  149   
  150       /**
  151        * Returns whether client authentication should be requested.
  152        *
  153        * @return whether client authentication should be requested.
  154        */
  155       public boolean getWantClientAuth() {
  156           return wantClientAuth;
  157       }
  158   
  159       /**
  160        * Sets whether client authentication should be requested. Calling
  161        * this method clears the <code>needClientAuth</code> flag.
  162        *
  163        * @param wantClientAuth whether client authentication should be requested
  164        */
  165       public void setWantClientAuth(boolean wantClientAuth) {
  166           this.wantClientAuth = wantClientAuth;
  167           this.needClientAuth = false;
  168       }
  169   
  170       /**
  171        * Returns whether client authentication should be required.
  172        *
  173        * @return whether client authentication should be required.
  174        */
  175       public boolean getNeedClientAuth() {
  176           return needClientAuth;
  177       }
  178   
  179       /**
  180        * Sets whether client authentication should be required. Calling
  181        * this method clears the <code>wantClientAuth</code> flag.
  182        *
  183        * @param needClientAuth whether client authentication should be required
  184        */
  185       public void setNeedClientAuth(boolean needClientAuth) {
  186           this.wantClientAuth = false;
  187           this.needClientAuth = needClientAuth;
  188       }
  189   
  190       /**
  191        * Returns the cryptographic algorithm constraints.
  192        *
  193        * @return the cryptographic algorithm constraints, or null if the
  194        *     constraints have not been set
  195        *
  196        * @see #setAlgorithmConstraints(AlgorithmConstraints)
  197        *
  198        * @since 1.7
  199        */
  200       public AlgorithmConstraints getAlgorithmConstraints() {
  201           return algorithmConstraints;
  202       }
  203   
  204       /**
  205        * Sets the cryptographic algorithm constraints, which will be used
  206        * in addition to any configured by the runtime environment.
  207        * <p>
  208        * If the <code>constraints</code> parameter is non-null, every
  209        * cryptographic algorithm, key and algorithm parameters used in the
  210        * SSL/TLS handshake must be permitted by the constraints.
  211        *
  212        * @param constraints the algorithm constraints (or null)
  213        *
  214        * @since 1.7
  215        */
  216       public void setAlgorithmConstraints(AlgorithmConstraints constraints) {
  217           // the constraints object is immutable
  218           this.algorithmConstraints = constraints;
  219       }
  220   
  221       /**
  222        * Gets the endpoint identification algorithm.
  223        *
  224        * @return the endpoint identification algorithm, or null if none
  225        * has been set.
  226        *
  227        * @see X509ExtendedTrustManager
  228        * @see #setEndpointIdentificationAlgorithm(String)
  229        *
  230        * @since 1.7
  231        */
  232       public String getEndpointIdentificationAlgorithm() {
  233           return identificationAlgorithm;
  234       }
  235   
  236       /**
  237        * Sets the endpoint identification algorithm.
  238        * <p>
  239        * If the <code>algorithm</code> parameter is non-null or non-empty, the
  240        * endpoint identification/verification procedures must be handled during
  241        * SSL/TLS handshaking.  This is to prevent man-in-the-middle attacks.
  242        *
  243        * @param algorithm The standard string name of the endpoint
  244        *     identification algorithm (or null).  See Appendix A in the <a href=
  245        *     "../../../technotes/guides/security/crypto/CryptoSpec.html#AppA">
  246        *     Java Cryptography Architecture API Specification &amp; Reference </a>
  247        *     for information about standard algorithm names.
  248        *
  249        * @see X509ExtendedTrustManager
  250        *
  251        * @since 1.7
  252        */
  253       public void setEndpointIdentificationAlgorithm(String algorithm) {
  254           this.identificationAlgorithm = algorithm;
  255       }
  256   
  257   }

Home » openjdk-7 » javax » net » ssl » [javadoc | source]