< prev index next >
test/sun/net/www/protocol/https/HttpsClient/ServerIdentityTest.java
Print this page
*** 1,7 ****
/*
! * Copyright (c) 2001, 2011, 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.
*** 24,34 ****
/*
* @test
* @bug 4328195
* @summary Need to include the alternate subject DN for certs,
* https should check for this
! * @run main/othervm ServerIdentityTest
*
* SunJSSE does not support dynamic system properties, no way to re-use
* system properties in samevm/agentvm mode.
*
* @author Yingxian Wang
--- 24,35 ----
/*
* @test
* @bug 4328195
* @summary Need to include the alternate subject DN for certs,
* https should check for this
! * @run main/othervm ServerIdentityTest dnsstore
! * @run main/othervm ServerIdentityTest ipstore
*
* SunJSSE does not support dynamic system properties, no way to re-use
* system properties in samevm/agentvm mode.
*
* @author Yingxian Wang
*** 50,78 ****
/*
* Should we run the client or server in a separate thread?
* Both sides can throw exceptions, but do you have a preference
* as to which side should be the main thread.
*/
! static boolean separateServerThread = true;
/*
* Where do we find the keystores?
*/
! static String pathToStores = "./";
! static String[] keyStoreFiles = {"dnsstore", "ipstore"};
! static String[] trustStoreFiles = {"dnsstore", "ipstore"};
! static String passwd = "changeit";
/*
! * Is the server ready to serve?
*/
! 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
--- 51,87 ----
/*
* Should we run the client or server in a separate thread?
* Both sides can throw exceptions, but do you have a preference
* as to which side should be the main thread.
*/
! static final boolean separateServerThread = true;
/*
* Where do we find the keystores?
*/
! static final String passwd = "changeit";
/*
! * Turn on SSL debugging?
*/
! static final boolean debug = true;
!
! static final int FREE_PORT = 0;
/*
! * Is the server ready to serve?
*/
! volatile boolean serverReady = false;
! volatile int serverPort = 0;
! volatile Exception serverException = null;
! volatile Exception clientException = null;
! SSLContext context;
! boolean iphost = false;
!
!
! Thread clientThread = null;
! Thread serverThread = null;
/*
* 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
*** 86,114 ****
*
* If the server prematurely exits, serverReady will be set to true
* to avoid infinite hangs.
*/
void doServerSide() throws Exception {
! SSLServerSocketFactory sslssf =
! context.getServerSocketFactory();
! SSLServerSocket sslServerSocket =
! (SSLServerSocket) sslssf.createServerSocket(serverPort);
serverPort = sslServerSocket.getLocalPort();
/*
* Signal Client, we're ready for his connect.
*/
serverReady = true;
! SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept();
! OutputStream sslOS = sslSocket.getOutputStream();
! BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(sslOS));
bw.write("HTTP/1.1 200 OK\r\n\r\n\r\n");
bw.flush();
Thread.sleep(2000);
sslSocket.getSession().invalidate();
! sslSocket.close();
}
/*
* Define the client side of the test.
*
--- 95,124 ----
*
* If the server prematurely exits, serverReady will be set to true
* to avoid infinite hangs.
*/
void doServerSide() throws Exception {
! SSLServerSocketFactory sslssf = context.getServerSocketFactory();
! try (SSLServerSocket sslServerSocket =
! (SSLServerSocket) sslssf.createServerSocket(FREE_PORT)) {
!
serverPort = sslServerSocket.getLocalPort();
/*
* Signal Client, we're ready for his connect.
*/
serverReady = true;
! try (SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept()) {
! BufferedWriter bw = new BufferedWriter(
! new OutputStreamWriter(sslSocket.getOutputStream()));
bw.write("HTTP/1.1 200 OK\r\n\r\n\r\n");
bw.flush();
Thread.sleep(2000);
sslSocket.getSession().invalidate();
! }
! }
}
/*
* Define the client side of the test.
*
*** 120,204 ****
* Wait for server to get started.
*/
while (!serverReady) {
Thread.sleep(50);
}
! String host = iphost? "127.0.0.1": "localhost";
! URL url = new URL("https://"+host+":"+serverPort+"/index.html");
HttpURLConnection urlc = (HttpURLConnection)url.openConnection();
! InputStream is = urlc.getInputStream();
! is.close();
}
/*
* =============================================================
* The remainder is just support stuff
*/
- volatile int serverPort = 0;
-
- volatile Exception serverException = null;
- volatile Exception clientException = null;
-
public static void main(String[] args) throws Exception {
! SSLSocketFactory reservedSFactory =
! HttpsURLConnection.getDefaultSSLSocketFactory();
! try {
! for (int i = 0; i < keyStoreFiles.length; i++) {
! String keyFilename =
! System.getProperty("test.src", ".") + "/" + pathToStores +
! "/" + keyStoreFiles[i];
! String trustFilename =
! System.getProperty("test.src", ".") + "/" + pathToStores +
! "/" + trustStoreFiles[i];
System.setProperty("javax.net.ssl.keyStore", keyFilename);
System.setProperty("javax.net.ssl.keyStorePassword", passwd);
System.setProperty("javax.net.ssl.trustStore", trustFilename);
System.setProperty("javax.net.ssl.trustStorePassword", passwd);
! if (debug)
System.setProperty("javax.net.debug", "all");
SSLContext context = SSLContext.getInstance("SSL");
KeyManager[] kms = new KeyManager[1];
KeyStore ks = KeyStore.getInstance("JKS");
! FileInputStream fis = new FileInputStream(keyFilename);
ks.load(fis, passwd.toCharArray());
! fis.close();
KeyManager km = new MyKeyManager(ks, passwd.toCharArray());
kms[0] = km;
context.init(kms, null, null);
HttpsURLConnection.setDefaultSSLSocketFactory(
context.getSocketFactory());
/*
* Start the tests.
*/
System.out.println("Testing " + keyFilename);
! new ServerIdentityTest(context, keyStoreFiles[i]);
! }
! } finally {
! HttpsURLConnection.setDefaultSSLSocketFactory(reservedSFactory);
! }
}
- Thread clientThread = null;
- Thread serverThread = null;
-
/*
* Primary constructor, used to drive remainder of the test.
*
* Fork off the other side, then do your work.
*/
! SSLContext context;
! boolean iphost = false;
! ServerIdentityTest(SSLContext context, String keystore)
! throws Exception {
this.context = context;
iphost = keystore.equals("ipstore");
if (separateServerThread) {
startServer(true);
startClient(false);
} else {
startClient(true);
--- 130,198 ----
* Wait for server to get started.
*/
while (!serverReady) {
Thread.sleep(50);
}
!
! String host = (iphost) ? "127.0.0.1" : "localhost";
! URL url = new URL("https://" +host + ":" + serverPort + "/index.html");
HttpURLConnection urlc = (HttpURLConnection)url.openConnection();
! try (InputStream is = urlc.getInputStream()) {
! is.readAllBytes();
! }
}
/*
* =============================================================
* The remainder is just support stuff
*/
public static void main(String[] args) throws Exception {
! String keyFilename = System.getProperty("test.src", ".")
! + "/" + args[0];
! String trustFilename = System.getProperty("test.src", ".")
! + "/" + args[0];
System.setProperty("javax.net.ssl.keyStore", keyFilename);
System.setProperty("javax.net.ssl.keyStorePassword", passwd);
System.setProperty("javax.net.ssl.trustStore", trustFilename);
System.setProperty("javax.net.ssl.trustStorePassword", passwd);
! if (debug) {
System.setProperty("javax.net.debug", "all");
+ }
+
SSLContext context = SSLContext.getInstance("SSL");
KeyManager[] kms = new KeyManager[1];
KeyStore ks = KeyStore.getInstance("JKS");
! try (FileInputStream fis = new FileInputStream(keyFilename)) {
ks.load(fis, passwd.toCharArray());
! }
KeyManager km = new MyKeyManager(ks, passwd.toCharArray());
kms[0] = km;
context.init(kms, null, null);
HttpsURLConnection.setDefaultSSLSocketFactory(
context.getSocketFactory());
/*
* Start the tests.
*/
System.out.println("Testing " + keyFilename);
! new ServerIdentityTest(context, args[0]);
}
/*
* Primary constructor, used to drive remainder of the test.
*
* Fork off the other side, then do your work.
*/
! ServerIdentityTest(SSLContext context, String keystore) throws Exception {
this.context = context;
iphost = keystore.equals("ipstore");
+
if (separateServerThread) {
startServer(true);
startClient(false);
} else {
startClient(true);
*** 212,248 ****
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() {
public void run() {
try {
doServerSide();
} catch (Exception e) {
- e.printStackTrace();
/*
* Our server thread just died.
*
* Release the client, if not active already...
*/
System.err.println("Server died...");
serverReady = true;
serverException = e;
}
}
};
--- 206,234 ----
serverThread.join();
} else {
clientThread.join();
}
! if (serverException != null || clientException != null) {
! throw new RuntimeException("Test failed");
! }
}
void startServer(boolean newThread) throws Exception {
if (newThread) {
serverThread = new Thread() {
public void run() {
try {
doServerSide();
} catch (Exception e) {
/*
* Our server thread just died.
*
* Release the client, if not active already...
*/
System.err.println("Server died...");
+ e.printStackTrace(System.out);
serverReady = true;
serverException = e;
}
}
};
*** 261,270 ****
--- 247,257 ----
} catch (Exception e) {
/*
* Our client thread just died.
*/
System.err.println("Client died...");
+ e.printStackTrace(System.out);
clientException = e;
}
}
};
clientThread.start();
< prev index next >