/*
 * Copyright (c) 2007, 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 sun.management.jmxremote;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import javax.rmi.ssl.SslRMIServerSocketFactory;

This class represents a specialized version of the SslRMIServerSocketFactory class that allows to supply an SSLContext.
See Also:
  • SslRMIServerSocketFactory
/** * This class represents a specialized version of the * <code>SslRMIServerSocketFactory</code> class that * allows to supply an <code>SSLContext</code>. * * @see javax.rmi.ssl.SslRMIServerSocketFactory */
public class SSLContextRMIServerSocketFactory extends SslRMIServerSocketFactory {

Creates a new SSLContextRMIServerSocketFactory with SSL sockets created from the SSLSocketFactory returned by the given SSLContext and configured with the default SSL parameters.

SSL connections accepted by server sockets created by this factory have the default cipher suites and protocol versions enabled and do not require client authentication.

Params:
  • context – the SSL context to be used for creating SSL sockets. Calling this constructor with a null context is equivalent to calling SslRMIServerSocketFactory().
/** * <p>Creates a new <code>SSLContextRMIServerSocketFactory</code> with * SSL sockets created from the <code>SSLSocketFactory</code> returned * by the given <code>SSLContext</code> and configured with the default * SSL parameters. * * <p>SSL connections accepted by server sockets created by this * factory have the default cipher suites and protocol versions * enabled and do not require client authentication.</p> * * @param context the SSL context to be used for creating SSL sockets. * Calling this constructor with a null <code>context</code> is equivalent * to calling <code>SslRMIServerSocketFactory()</code>. */
public SSLContextRMIServerSocketFactory(SSLContext context) { this(context, null, null, false); }

Creates a new SSLContextRMIServerSocketFactory with SSL sockets created from the SSLSocketFactory returned by the given SSLContext and configured with the supplied SSL parameters.

Params:
  • context – the SSL context to be used for creating SSL sockets. Calling this constructor with a null context is equivalent to calling SslRMIServerSocketFactory(enabledCipherSuites, enabledProtocols, needClientAuth).
  • enabledCipherSuites – names of all the cipher suites to enable on SSL connections accepted by server sockets created by this factory, or null to use the cipher suites that are enabled by default
  • enabledProtocols – names of all the protocol versions to enable on SSL connections accepted by server sockets created by this factory, or null to use the protocol versions that are enabled by default
  • needClientAuth – true to require client authentication on SSL connections accepted by server sockets created by this factory; false to not require client authentication
Throws:
  • IllegalArgumentException – when one or more of the cipher suites named by the enabledCipherSuites parameter is not supported, when one or more of the protocols named by the enabledProtocols parameter is not supported or when a problem is encountered while trying to check if the supplied cipher suites and protocols to be enabled are supported.
See Also:
/** * <p>Creates a new <code>SSLContextRMIServerSocketFactory</code> with * SSL sockets created from the <code>SSLSocketFactory</code> returned * by the given <code>SSLContext</code> and configured with the supplied * SSL parameters. * * @param context the SSL context to be used for creating SSL sockets. * Calling this constructor with a null <code>context</code> is equivalent * to calling <code>SslRMIServerSocketFactory(enabledCipherSuites, * enabledProtocols, needClientAuth)</code>. * * @param enabledCipherSuites names of all the cipher suites to * enable on SSL connections accepted by server sockets created by * this factory, or <code>null</code> to use the cipher suites * that are enabled by default * * @param enabledProtocols names of all the protocol versions to * enable on SSL connections accepted by server sockets created by * this factory, or <code>null</code> to use the protocol versions * that are enabled by default * * @param needClientAuth <code>true</code> to require client * authentication on SSL connections accepted by server sockets * created by this factory; <code>false</code> to not require * client authentication * * @exception IllegalArgumentException when one or more of the cipher * suites named by the <code>enabledCipherSuites</code> parameter is * not supported, when one or more of the protocols named by the * <code>enabledProtocols</code> parameter is not supported or when * a problem is encountered while trying to check if the supplied * cipher suites and protocols to be enabled are supported. * * @see SSLSocket#setEnabledCipherSuites * @see SSLSocket#setEnabledProtocols * @see SSLSocket#setNeedClientAuth */
public SSLContextRMIServerSocketFactory( SSLContext context, String[] enabledCipherSuites, String[] enabledProtocols, boolean needClientAuth) throws IllegalArgumentException { super(enabledCipherSuites, enabledProtocols, needClientAuth); this.context = context; // NOTE: We should check the availability of the enabledCipherSuites // and enabledProtocols in the socket factory returned by the call // context.getSocketFactory() because it could differ from the one // returned by SSLSocketFactory.getDefault(), which is already // checked in the parent's class constructor, but we don't do it // because we know that although the factory the out-of-the-box // management agent uses might be different, they are of the same // type and use the same underlying SSLSocket implementation. }

Creates a server socket that accepts SSL connections configured according to this factory's SSL socket configuration parameters. If a null SSLContext was supplied in the constructor this method just calls super.createServerSocket(port). Otherwise, the SSLSocketFactory returned by the call to SSLContext.getSocketFactory() will be used to create the SSL sockets.

/** * <p>Creates a server socket that accepts SSL connections configured * according to this factory's SSL socket configuration parameters. * If a null <code>SSLContext</code> was supplied in the constructor * this method just calls <code>super.createServerSocket(port)</code>. * Otherwise, the <code>SSLSocketFactory</code> returned by the call to * <code>SSLContext.getSocketFactory()</code> will be used to create the * SSL sockets.</p> */
@Override public ServerSocket createServerSocket(int port) throws IOException { if (context == null) { return super.createServerSocket(port); } else { final SSLSocketFactory sslSocketFactory = context.getSocketFactory(); return new ServerSocket(port) { public Socket accept() throws IOException { Socket socket = super.accept(); SSLSocket sslSocket = (SSLSocket) sslSocketFactory.createSocket( socket, socket.getInetAddress().getHostName(), socket.getPort(), true); sslSocket.setUseClientMode(false); if (getEnabledCipherSuites() != null) { sslSocket.setEnabledCipherSuites(getEnabledCipherSuites()); } if (getEnabledProtocols() != null) { sslSocket.setEnabledProtocols(getEnabledProtocols()); } sslSocket.setNeedClientAuth(getNeedClientAuth()); return sslSocket; } }; } }

Indicates whether some other object is "equal to" this one.

Two SSLContextRMIServerSocketFactory objects are equal if they have been constructed with the same SSL context and SSL socket configuration parameters.

A subclass should override this method (as well as hashCode()) if it adds instance state that affects equality.

/** * <p>Indicates whether some other object is "equal to" this one.</p> * * <p>Two <code>SSLContextRMIServerSocketFactory</code> objects are * equal if they have been constructed with the same SSL context and * SSL socket configuration parameters.</p> * * <p>A subclass should override this method (as well as * {@link #hashCode()}) if it adds instance state that affects * equality.</p> */
@Override public boolean equals(Object obj) { if (!super.equals(obj)) return false; SSLContextRMIServerSocketFactory that = (SSLContextRMIServerSocketFactory) obj; return context == null ? that.context == null : context.equals(that.context); }

Returns a hash code value for this SSLContextRMIServerSocketFactory.

Returns:a hash code value for this SSLContextRMIServerSocketFactory.
/** * <p>Returns a hash code value for this * <code>SSLContextRMIServerSocketFactory</code>.</p> * * @return a hash code value for this * <code>SSLContextRMIServerSocketFactory</code>. */
@Override public int hashCode() { return super.hashCode() + (context == null ? 0 : context.hashCode()); } private SSLContext context; }