/*
* 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 );
}
}
Messung V0.5 in Prozent C=89 H=91 G=89
¤ Dauer der Verarbeitung: 0.6 Sekunden
¤
*© Formatika GbR, Deutschland