blob: 3a0a3d76680f8fc9b7ffb907b789778441b8ad61 [file]
/*
* Copyright (c) 2005, 2024, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.net.httpserver;
import java.net.InetSocketAddress;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLParameters;
/**
* Represents the set of parameters for each https connection negotiated with
* clients. One of these is created and passed to
* {@link HttpsConfigurator#configure(HttpsParameters)} for every incoming https
* connection, in order to determine the parameters to use.
*
* <p> The underlying SSL parameters may be established either via the set/get
* methods of this class, or else via a {@link javax.net.ssl.SSLParameters}
* object. {@code SSLParameters} is the preferred method, because in the future,
* additional configuration capabilities may be added to that class, and it is
* easier to determine the set of supported parameters and their default values
* with SSLParameters. Also, if an {@code SSLParameters} object is provided via
* {@link #setSSLParameters(SSLParameters)} then those parameter settings are
* used, and any settings made in this object are ignored.
*
* @since 1.6
*/
public abstract class HttpsParameters {
private String[] cipherSuites;
private String[] protocols;
private boolean wantClientAuth;
private boolean needClientAuth;
/**
* Constructor for subclasses to call.
*/
protected HttpsParameters() {}
/**
* Returns the {@link HttpsConfigurator} for this {@code HttpsParameters}.
*
* @return {@code HttpsConfigurator} for this instance of {@code HttpsParameters}
*/
public abstract HttpsConfigurator getHttpsConfigurator();
/**
* Returns the address of the remote client initiating the connection.
*
* @return address of the remote client initiating the connection
*/
public abstract InetSocketAddress getClientAddress();
/**
* Sets the {@link SSLParameters} to use for this {@code HttpsParameters}.
* The parameters must be supported by the {@link SSLContext} contained
* by the {@link HttpsConfigurator} associated with this {@code HttpsParameters}.
* If no parameters are set, then the default behavior is to use
* the default parameters from the associated {@link SSLContext}.
*
* @param params the {@code SSLParameters} to set. If {@code null} then the
* existing parameters (if any) remain unchanged
* @throws IllegalArgumentException if any of the parameters are invalid or
* unsupported
*/
public abstract void setSSLParameters(SSLParameters params);
/**
* Returns a copy of the array of ciphersuites or {@code null} if none
* have been set.
*
* @deprecated It is recommended that the SSL parameters be configured and
* read through the use of {@link #setSSLParameters(SSLParameters) SSLParameters}.
*
* @return a copy of the array of ciphersuites or {@code null} if none have
* been set
*/
@Deprecated(since = "23")
public String[] getCipherSuites() {
return cipherSuites != null ? cipherSuites.clone() : null;
}
/**
* Sets the array of ciphersuites.
*
* @deprecated It is recommended that the SSL parameters be configured and
* read through the use of {@link #setSSLParameters(SSLParameters) SSLParameters}. Use
* {@link SSLParameters#setCipherSuites(String[])} instead.
*
* @param cipherSuites the array of ciphersuites (or {@code null})
*/
@Deprecated(since = "23")
public void setCipherSuites(String[] cipherSuites) {
this.cipherSuites = cipherSuites != null ? cipherSuites.clone() : null;
}
/**
* Returns a copy of the array of protocols or {@code null} if none have been
* set.
*
* @deprecated It is recommended that the SSL parameters be configured and
* read through the use of {@link #setSSLParameters(SSLParameters) SSLParameters}.
*
* @return a copy of the array of protocols or {@code null} if none have been
* set
*/
@Deprecated(since = "23")
public String[] getProtocols() {
return protocols != null ? protocols.clone() : null;
}
/**
* Sets the array of protocols.
*
* @deprecated It is recommended that the SSL parameters be configured and
* read through the use of {@link #setSSLParameters(SSLParameters) SSLParameters}. Use
* {@link SSLParameters#setProtocols(String[])} instead.
*
* @param protocols the array of protocols (or {@code null})
*/
@Deprecated(since = "23")
public void setProtocols(String[] protocols) {
this.protocols = protocols != null ? protocols.clone() : null;
}
/**
* Returns whether client authentication should be requested.
*
* @deprecated It is recommended that the SSL parameters be configured and
* read through the use of {@link #setSSLParameters(SSLParameters) SSLParameters}.
*
* @return whether client authentication should be requested
*/
@Deprecated(since = "23")
public boolean getWantClientAuth() {
return wantClientAuth;
}
/**
* Sets whether client authentication should be requested. Calling this
* method clears the {@code needClientAuth} flag.
*
* @deprecated It is recommended that the SSL parameters be configured and
* read through the use of {@link #setSSLParameters(SSLParameters) SSLParameters}. Use
* {@link SSLParameters#setWantClientAuth(boolean)} instead.
*
* @param wantClientAuth whether client authentication should be requested
*/
@Deprecated(since = "23")
public void setWantClientAuth(boolean wantClientAuth) {
this.wantClientAuth = wantClientAuth;
this.needClientAuth = false;
}
/**
* Returns whether client authentication should be required.
*
* @deprecated It is recommended that the SSL parameters be configured and
* read through the use of {@link #setSSLParameters(SSLParameters) SSLParameters}.
*
* @return whether client authentication should be required
*/
@Deprecated(since = "23")
public boolean getNeedClientAuth() {
return needClientAuth;
}
/**
* Sets whether client authentication should be required. Calling this method
* clears the {@code wantClientAuth} flag.
*
* @deprecated It is recommended that the SSL parameters be configured and
* read through the use of {@link #setSSLParameters(SSLParameters) SSLParameters}. Use
* {@link SSLParameters#setNeedClientAuth(boolean)} instead.
*
* @param needClientAuth whether client authentication should be required
*/
@Deprecated(since = "23")
public void setNeedClientAuth(boolean needClientAuth) {
this.needClientAuth = needClientAuth;
this.wantClientAuth = false;
}
}