blob: e853a32413a84f485fe7b5b3355150db6e8d5bab [file] [log] [blame]
/*
* Copyright (c) 2004, 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.
*
* 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.
*/
import java.io.IOException;
import java.io.File;
import java.io.Serializable;
import java.net.ServerSocket;
import java.net.Socket;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.server.RMIClientSocketFactory;
import java.rmi.server.RMIServerSocketFactory;
import java.rmi.server.UnicastRemoteObject;
import javax.net.ssl.SSLContext;
import javax.rmi.ssl.SslRMIClientSocketFactory;
import javax.rmi.ssl.SslRMIServerSocketFactory;
public class SSLSocketParametersTest implements Serializable {
public interface Hello extends Remote {
public String sayHello() throws RemoteException;
}
public class HelloImpl extends UnicastRemoteObject implements Hello {
public HelloImpl(int port,
RMIClientSocketFactory csf,
RMIServerSocketFactory ssf)
throws RemoteException {
super(port, csf, ssf);
}
public String sayHello() {
return "Hello World!";
}
public Remote runServer() throws IOException {
System.out.println("Inside HelloImpl::runServer");
// Get a remote stub for this RMI object
//
Remote stub = toStub(this);
System.out.println("Stub = " + stub);
return stub;
}
}
public class HelloClient {
public void runClient(Remote stub) throws IOException {
System.out.println("Inside HelloClient::runClient");
// "obj" is the identifier that we'll use to refer
// to the remote object that implements the "Hello"
// interface
Hello obj = (Hello) stub;
String message = obj.sayHello();
System.out.println(message);
}
}
public class ClientFactory extends SslRMIClientSocketFactory {
public ClientFactory() {
super();
}
public Socket createSocket(String host, int port) throws IOException {
System.out.println("ClientFactory::Calling createSocket(" +
host + "," + port + ")");
return super.createSocket(host, port);
}
}
public class ServerFactory extends SslRMIServerSocketFactory {
public ServerFactory() {
super();
}
public ServerFactory(String[] ciphers,
String[] protocols,
boolean need) {
super(ciphers, protocols, need);
}
public ServerFactory(SSLContext context,
String[] ciphers,
String[] protocols,
boolean need) {
super(context, ciphers, protocols, need);
}
public ServerSocket createServerSocket(int port) throws IOException {
System.out.println("ServerFactory::Calling createServerSocket(" +
port + ")");
return super.createServerSocket(port);
}
}
public void runTest(String[] args) {
int test = Integer.parseInt(args[0]);
String msg1 = "Running SSLSocketParametersTest [" + test + "]";
String msg2 = "SSLSocketParametersTest [" + test + "] PASSED!";
String msg3 = "SSLSocketParametersTest [" + test + "] FAILED!";
switch (test) {
case 1: /* default constructor - default config */
System.out.println(msg1);
try {
HelloImpl server = new HelloImpl(
0,
new ClientFactory(),
new ServerFactory());
Remote stub = server.runServer();
HelloClient client = new HelloClient();
client.runClient(stub);
System.out.println(msg2);
} catch (Exception e) {
System.out.println(msg3 + " Exception: " + e.toString());
e.printStackTrace(System.out);
System.exit(1);
}
break;
case 2: /* non-default constructor - default config */
System.out.println(msg1);
try {
HelloImpl server = new HelloImpl(
0,
new ClientFactory(),
new ServerFactory(null,
null,
false));
Remote stub = server.runServer();
HelloClient client = new HelloClient();
client.runClient(stub);
System.out.println(msg2);
} catch (Exception e) {
System.out.println(msg3 + " Exception: " + e.toString());
e.printStackTrace(System.out);
System.exit(1);
}
break;
case 3: /* needClientAuth=true */
System.out.println(msg1);
try {
HelloImpl server = new HelloImpl(
0,
new ClientFactory(),
new ServerFactory(null,
null,
null,
true));
Remote stub = server.runServer();
HelloClient client = new HelloClient();
client.runClient(stub);
System.out.println(msg2);
} catch (Exception e) {
System.out.println(msg3 + " Exception: " + e.toString());
e.printStackTrace(System.out);
System.exit(1);
}
break;
case 4: /* server side dummy_ciphersuite */
System.out.println(msg1);
try {
HelloImpl server = new HelloImpl(
0,
new ClientFactory(),
new ServerFactory(SSLContext.getDefault(),
new String[] {"dummy_ciphersuite"},
null,
false));
Remote stub = server.runServer();
HelloClient client = new HelloClient();
client.runClient(stub);
System.out.println(msg3);
System.exit(1);
} catch (Exception e) {
System.out.println(msg2 + " Exception: " + e.toString());
System.exit(0);
}
break;
case 5: /* server side dummy_protocol */
System.out.println(msg1);
try {
HelloImpl server = new HelloImpl(
0,
new ClientFactory(),
new ServerFactory(null,
new String[] {"dummy_protocol"},
false));
Remote stub = server.runServer();
HelloClient client = new HelloClient();
client.runClient(stub);
System.out.println(msg3);
System.exit(1);
} catch (Exception e) {
System.out.println(msg2 + " Exception: " + e.toString());
System.exit(0);
}
break;
case 6: /* client side dummy_ciphersuite */
System.out.println(msg1);
try {
System.setProperty("javax.rmi.ssl.client.enabledCipherSuites",
"dummy_ciphersuite");
HelloImpl server = new HelloImpl(
0,
new ClientFactory(),
new ServerFactory());
Remote stub = server.runServer();
HelloClient client = new HelloClient();
client.runClient(stub);
System.out.println(msg3);
System.exit(1);
} catch (Exception e) {
System.out.println(msg2 + " Exception: " + e.toString());
System.exit(0);
}
break;
case 7: /* client side dummy_protocol */
System.out.println(msg1);
try {
System.setProperty("javax.rmi.ssl.client.enabledProtocols",
"dummy_protocol");
HelloImpl server = new HelloImpl(
0,
new ClientFactory(),
new ServerFactory());
Remote stub = server.runServer();
HelloClient client = new HelloClient();
client.runClient(stub);
System.out.println(msg3);
System.exit(1);
} catch (Exception e) {
System.out.println(msg2 + " Exception: " + e.toString());
System.exit(0);
}
break;
default:
throw new IllegalArgumentException("invalid test number");
}
}
public static void main(String[] args) {
// Set keystore properties (server-side)
//
final String keystore = System.getProperty("test.src") +
File.separator + "keystore";
System.out.println("KeyStore = " + keystore);
System.setProperty("javax.net.ssl.keyStore", keystore);
System.setProperty("javax.net.ssl.keyStorePassword", "password");
// Set truststore properties (client-side)
//
final String truststore = System.getProperty("test.src") +
File.separator + "truststore";
System.out.println("TrustStore = " + truststore);
System.setProperty("javax.net.ssl.trustStore", truststore);
System.setProperty("javax.net.ssl.trustStorePassword", "trustword");
// Run test
//
SSLSocketParametersTest test = new SSLSocketParametersTest();
test.runTest(args);
System.exit(0);
}
}