< prev index next >
test/sun/security/ssl/ServerHandshaker/AnonCipherWithWantClientAuth.java
Print this page
*** 1,7 ****
/*
! * Copyright (c) 2001, 2015, 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.
--- 1,7 ----
/*
! * Copyright (c) 2001, 2016, 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.
*** 32,44 ****
* @summary Calling setWantClientAuth(true) disables anonymous suites
* @run main/othervm/timeout=180 AnonCipherWithWantClientAuth
*/
import java.io.*;
! import java.net.*;
import javax.net.ssl.*;
import java.security.Security;
public class AnonCipherWithWantClientAuth {
/*
* =============================================================
--- 32,48 ----
* @summary Calling setWantClientAuth(true) disables anonymous suites
* @run main/othervm/timeout=180 AnonCipherWithWantClientAuth
*/
import java.io.*;
! import java.net.InetSocketAddress;
! import java.net.SocketTimeoutException;
!
import javax.net.ssl.*;
import java.security.Security;
+ import java.util.concurrent.CountDownLatch;
+ import java.util.concurrent.TimeUnit;
public class AnonCipherWithWantClientAuth {
/*
* =============================================================
*** 60,77 ****
static String keyStoreFile = "keystore";
static String trustStoreFile = "truststore";
static String passwd = "passphrase";
/*
* Is the server ready to serve?
*/
! volatile static boolean serverReady = false;
/*
! * Turn on SSL debugging?
*/
! static boolean debug = false;
/*
* If the client or server is doing some kind of object creation
* that the other side depends on, and that thread prematurely
* exits, you may experience a hang. The test harness will
--- 64,91 ----
static String keyStoreFile = "keystore";
static String trustStoreFile = "truststore";
static String passwd = "passphrase";
/*
+ * Turn on SSL debugging?
+ */
+ static boolean debug = false;
+
+ /*
* Is the server ready to serve?
*/
! private static final CountDownLatch serverCondition = new CountDownLatch(1);
/*
! * Is the client ready to handshake?
*/
! private static final CountDownLatch clientCondition = new CountDownLatch(1);
!
! /*
! * use any free port by default
! */
! private volatile int serverPort = 0;
/*
* If the client or server is doing some kind of object creation
* that the other side depends on, and that thread prematurely
* exits, you may experience a hang. The test harness will
*** 95,118 ****
String ciphers[]={"SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA",
"SSL_DH_anon_EXPORT_WITH_RC4_40_MD5",
"SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA"};
sslServerSocket.setEnabledCipherSuites(ciphers);
sslServerSocket.setWantClientAuth(true);
- /*
- * Signal Client, we're ready for his connect.
- */
- serverReady = true;
! SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept();
InputStream sslIS = sslSocket.getInputStream();
OutputStream sslOS = sslSocket.getOutputStream();
sslIS.read();
sslOS.write(85);
sslOS.flush();
!
sslSocket.close();
}
/*
* Define the client side of the test.
*
--- 109,156 ----
String ciphers[]={"SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA",
"SSL_DH_anon_EXPORT_WITH_RC4_40_MD5",
"SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA"};
sslServerSocket.setEnabledCipherSuites(ciphers);
sslServerSocket.setWantClientAuth(true);
! // Signal the client, the server is ready to accept connection.
! serverCondition.countDown();
!
! // Try to accept a connection in 30 seconds.
! SSLSocket sslSocket;
! try {
! sslServerSocket.setSoTimeout(30000);
! sslSocket = (SSLSocket)sslServerSocket.accept();
! } catch (SocketTimeoutException ste) {
! sslServerSocket.close();
!
! // Ignore the test case if no connection within 30 seconds.
! System.out.println(
! "No incoming client connection in 30 seconds. " +
! "Ignore in server side.");
! return;
! }
!
! try {
! boolean clientIsReady = clientCondition.await(30L,
! TimeUnit.SECONDS);
! if (clientIsReady) {
InputStream sslIS = sslSocket.getInputStream();
OutputStream sslOS = sslSocket.getOutputStream();
sslIS.read();
sslOS.write(85);
sslOS.flush();
! } else {
! System.out.println(
! "The client is not the expected one or timeout. "
! + "Ignore in server side.");
! }
! } finally {
sslSocket.close();
+ sslServerSocket.close();
+ }
}
/*
* Define the client side of the test.
*
*** 122,162 ****
void doClientSide() throws Exception {
/*
* Wait for server to get started.
*/
! while (!serverReady) {
! Thread.sleep(50);
}
SSLSocketFactory sslsf =
(SSLSocketFactory) SSLSocketFactory.getDefault();
! SSLSocket sslSocket = (SSLSocket)
! sslsf.createSocket("localhost", serverPort);
! String ciphers[] = {"SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA",
! "SSL_DH_anon_EXPORT_WITH_RC4_40_MD5"};
sslSocket.setEnabledCipherSuites(ciphers);
sslSocket.setUseClientMode(true);
InputStream sslIS = sslSocket.getInputStream();
OutputStream sslOS = sslSocket.getOutputStream();
sslOS.write(280);
sslOS.flush();
sslIS.read();
!
! sslSocket.close();
}
/*
* =============================================================
* The remainder is just support stuff
*/
- // use any free port by default
- volatile int serverPort = 0;
-
volatile Exception serverException = null;
volatile Exception clientException = null;
public static void main(String[] args) throws Exception {
// reset security properties to make sure that the algorithms
--- 160,219 ----
void doClientSide() throws Exception {
/*
* Wait for server to get started.
*/
! boolean serverIsReady =
! serverCondition.await(90L, TimeUnit.SECONDS);
! if (!serverIsReady) {
! System.out.println(
! "The server is not ready yet in 90 seconds. " +
! "Ignore in client side.");
! return;
}
SSLSocketFactory sslsf =
(SSLSocketFactory) SSLSocketFactory.getDefault();
! try (SSLSocket sslSocket = (SSLSocket) sslsf.createSocket("localhost",
! serverPort)) {
! try {
! sslSocket.connect(
! new InetSocketAddress("localhost", serverPort), 15000);
! } catch (IOException ioe) {
! // The server side may be impacted by naughty test cases or
! // third party routines, and cannot accept connections.
! //
! // Just ignore the test if the connection cannot be
! // established.
! System.out.println(
! "Cannot make a connection in 15 seconds. " +
! "Ignore in client side.");
! return;
! }
!
! String ciphers[] = { "SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA",
! "SSL_DH_anon_EXPORT_WITH_RC4_40_MD5" };
sslSocket.setEnabledCipherSuites(ciphers);
sslSocket.setUseClientMode(true);
+ // Signal the server, the client is ready to communicate.
+ clientCondition.countDown();
+
InputStream sslIS = sslSocket.getInputStream();
OutputStream sslOS = sslSocket.getOutputStream();
sslOS.write(280);
sslOS.flush();
sslIS.read();
! }
}
/*
* =============================================================
* The remainder is just support stuff
*/
volatile Exception serverException = null;
volatile Exception clientException = null;
public static void main(String[] args) throws Exception {
// reset security properties to make sure that the algorithms
*** 191,229 ****
/*
* Primary constructor, used to drive remainder of the test.
*
* Fork off the other side, then do your work.
*/
! AnonCipherWithWantClientAuth () throws Exception {
if (separateServerThread) {
startServer(true);
startClient(false);
} else {
startClient(true);
startServer(false);
}
/*
* Wait for other side to close down.
*/
if (separateServerThread) {
serverThread.join();
} else {
clientThread.join();
}
/*
* When we get here, the test is pretty much over.
! *
! * If the main thread excepted, that propagates back
! * immediately. If the other thread threw an exception, we
! * should report back.
! */
! if (serverException != null)
! throw serverException;
! if (clientException != null)
! throw clientException;
}
void startServer(boolean newThread) throws Exception {
if (newThread) {
serverThread = new Thread() {
--- 248,328 ----
/*
* Primary constructor, used to drive remainder of the test.
*
* Fork off the other side, then do your work.
*/
! AnonCipherWithWantClientAuth() throws Exception {
! Exception startException = null;
! try {
if (separateServerThread) {
startServer(true);
startClient(false);
} else {
startClient(true);
startServer(false);
}
+ } catch (Exception e) {
+ startException = e;
+ }
/*
* Wait for other side to close down.
*/
if (separateServerThread) {
+ if (serverThread != null) {
serverThread.join();
+ }
} else {
+ if (clientThread != null) {
clientThread.join();
}
+ }
/*
* When we get here, the test is pretty much over.
! * Which side threw the error?
! */
! Exception local;
! Exception remote;
!
! if (separateServerThread) {
! remote = serverException;
! local = clientException;
! } else {
! remote = clientException;
! local = serverException;
! }
!
! Exception exception = null;
!
! /*
! * Check various exception conditions.
! */
! if ((local != null) && (remote != null)) {
! // If both failed, return the curthread's exception.
! local.initCause(remote);
! exception = local;
! } else if (local != null) {
! exception = local;
! } else if (remote != null) {
! exception = remote;
! } else if (startException != null) {
! exception = startException;
! }
!
! /*
! * If there was an exception *AND* a startException,
! * output it.
! */
! if (exception != null) {
! if (exception != startException && startException != null) {
! exception.addSuppressed(startException);
! }
! throw exception;
! }
!
! // Fall-through: no exception to throw!
}
void startServer(boolean newThread) throws Exception {
if (newThread) {
serverThread = new Thread() {
*** 233,250 ****
} catch (Exception e) {
/*
* Our server thread just died.
*/
System.err.println("Server died...");
- serverReady = true;
serverException = e;
}
}
};
serverThread.start();
} else {
doServerSide();
}
}
void startClient(boolean newThread) throws Exception {
if (newThread) {
--- 332,353 ----
} catch (Exception e) {
/*
* Our server thread just died.
*/
System.err.println("Server died...");
serverException = e;
}
}
};
serverThread.start();
} else {
+ try {
doServerSide();
+ } catch (Exception e) {
+ System.out.println("Server failed: " + e);
+ serverException = e;
+ }
}
}
void startClient(boolean newThread) throws Exception {
if (newThread) {
*** 261,269 ****
--- 364,378 ----
}
}
};
clientThread.start();
} else {
+ try {
doClientSide();
+ } catch (Exception e) {
+ System.out.println("Client failed: " + e);
+ clientException = e;
+ }
}
}
}
+
< prev index next >