|
|
3c4066 |
# HG changeset patch
|
|
|
3c4066 |
# User xuelei
|
|
|
3c4066 |
# Date 1453868482 0
|
|
|
3c4066 |
# Wed Jan 27 04:21:22 2016 +0000
|
|
|
3c4066 |
# Node ID 8d589911411743fa38badf69c10aa067eaa996b7
|
|
|
3c4066 |
# Parent ceb95f0d38d7ab09762dd7ff33bb855f3088a6b5
|
|
|
3c4066 |
8076221, PR2809: Disable RC4 cipher suites
|
|
|
3c4066 |
Reviewed-by: wetmore
|
|
|
3c4066 |
|
|
|
176549 |
diff --git a/src/share/lib/security/java.security-linux b/src/share/lib/security/java.security-linux
|
|
|
176549 |
--- openjdk/jdk/src/share/lib/security/java.security-linux
|
|
|
176549 |
+++ openjdk/jdk/src/share/lib/security/java.security-linux
|
|
|
83442e |
@@ -556,7 +556,7 @@
|
|
|
e1fe81 |
#
|
|
|
e1fe81 |
# Example:
|
|
|
e1fe81 |
# jdk.tls.disabledAlgorithms=MD5, SSLv3, DSA, RSA keySize < 2048
|
|
|
83442e |
-jdk.tls.disabledAlgorithms=SSLv3, MD5withRSA, DH keySize < 1024, \
|
|
|
83442e |
+jdk.tls.disabledAlgorithms=SSLv3, RC4, MD5withRSA, DH keySize < 1024, \
|
|
|
83442e |
EC keySize < 224, DES40_CBC, RC4_40
|
|
|
e1fe81 |
|
|
|
e1fe81 |
# Legacy algorithms for Secure Socket Layer/Transport Layer Security (SSL/TLS)
|
|
|
176549 |
diff --git a/src/share/lib/security/java.security-macosx b/src/share/lib/security/java.security-macosx
|
|
|
176549 |
--- openjdk/jdk/src/share/lib/security/java.security-macosx
|
|
|
176549 |
+++ openjdk/jdk/src/share/lib/security/java.security-macosx
|
|
|
83442e |
@@ -561,7 +561,7 @@
|
|
|
e1fe81 |
#
|
|
|
e1fe81 |
# Example:
|
|
|
e1fe81 |
# jdk.tls.disabledAlgorithms=MD5, SSLv3, DSA, RSA keySize < 2048
|
|
|
83442e |
-jdk.tls.disabledAlgorithms=SSLv3, MD5withRSA, DH keySize < 1024, \
|
|
|
83442e |
+jdk.tls.disabledAlgorithms=SSLv3, RC4, MD5withRSA, DH keySize < 1024, \
|
|
|
83442e |
EC keySize < 224, DES40_CBC, RC4_40
|
|
|
e1fe81 |
|
|
|
e1fe81 |
# Legacy algorithms for Secure Socket Layer/Transport Layer Security (SSL/TLS)
|
|
|
176549 |
diff --git a/src/share/lib/security/java.security-solaris b/src/share/lib/security/java.security-solaris
|
|
|
176549 |
--- openjdk/jdk/src/share/lib/security/java.security-solaris
|
|
|
176549 |
+++ openjdk/jdk/src/share/lib/security/java.security-solaris
|
|
|
83442e |
@@ -560,7 +560,7 @@
|
|
|
e1fe81 |
#
|
|
|
e1fe81 |
# Example:
|
|
|
e1fe81 |
# jdk.tls.disabledAlgorithms=MD5, SSLv3, DSA, RSA keySize < 2048
|
|
|
83442e |
-jdk.tls.disabledAlgorithms=SSLv3, MD5withRSA, DH keySize < 1024, \
|
|
|
83442e |
+jdk.tls.disabledAlgorithms=SSLv3, RC4, MD5withRSA, DH keySize < 1024, \
|
|
|
83442e |
EC keySize < 224, DES40_CBC, RC4_40
|
|
|
e1fe81 |
|
|
|
e1fe81 |
# Legacy algorithms for Secure Socket Layer/Transport Layer Security (SSL/TLS)
|
|
|
176549 |
diff --git a/src/share/lib/security/java.security-windows b/src/share/lib/security/java.security-windows
|
|
|
176549 |
--- openjdk/jdk/src/share/lib/security/java.security-windows
|
|
|
176549 |
+++ openjdk/jdk/src/share/lib/security/java.security-windows
|
|
|
83442e |
@@ -561,7 +561,7 @@
|
|
|
e1fe81 |
#
|
|
|
e1fe81 |
# Example:
|
|
|
e1fe81 |
# jdk.tls.disabledAlgorithms=MD5, SSLv3, DSA, RSA keySize < 2048
|
|
|
83442e |
-jdk.tls.disabledAlgorithms=SSLv3, MD5withRSA, DH keySize < 1024, \
|
|
|
83442e |
+jdk.tls.disabledAlgorithms=SSLv3, RC4, MD5withRSA, DH keySize < 1024, \
|
|
|
83442e |
EC keySize < 224, DES40_CBC, RC4_40
|
|
|
e1fe81 |
|
|
|
e1fe81 |
# Legacy algorithms for Secure Socket Layer/Transport Layer Security (SSL/TLS)
|
|
|
176549 |
diff --git a/test/javax/net/ssl/ciphersuites/DisabledAlgorithms.java b/test/javax/net/ssl/ciphersuites/DisabledAlgorithms.java
|
|
|
176549 |
new file mode 100644
|
|
|
176549 |
--- /dev/null
|
|
|
176549 |
+++ openjdk/jdk/test/javax/net/ssl/ciphersuites/DisabledAlgorithms.java
|
|
|
e1fe81 |
@@ -0,0 +1,362 @@
|
|
|
e1fe81 |
+/*
|
|
|
e1fe81 |
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
|
|
|
e1fe81 |
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
|
e1fe81 |
+ *
|
|
|
e1fe81 |
+ * This code is free software; you can redistribute it and/or modify it
|
|
|
e1fe81 |
+ * under the terms of the GNU General Public License version 2 only, as
|
|
|
e1fe81 |
+ * published by the Free Software Foundation.
|
|
|
e1fe81 |
+ *
|
|
|
e1fe81 |
+ * This code is distributed in the hope that it will be useful, but WITHOUT
|
|
|
e1fe81 |
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
|
e1fe81 |
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
|
e1fe81 |
+ * version 2 for more details (a copy is included in the LICENSE file that
|
|
|
e1fe81 |
+ * accompanied this code).
|
|
|
e1fe81 |
+ *
|
|
|
e1fe81 |
+ * You should have received a copy of the GNU General Public License version
|
|
|
e1fe81 |
+ * 2 along with this work; if not, write to the Free Software Foundation,
|
|
|
e1fe81 |
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
|
e1fe81 |
+ *
|
|
|
e1fe81 |
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
|
|
e1fe81 |
+ * or visit www.oracle.com if you need additional information or have any
|
|
|
e1fe81 |
+ * questions.
|
|
|
e1fe81 |
+ */
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+import java.io.BufferedInputStream;
|
|
|
e1fe81 |
+import java.io.BufferedOutputStream;
|
|
|
e1fe81 |
+import java.io.IOException;
|
|
|
e1fe81 |
+import java.io.InputStream;
|
|
|
e1fe81 |
+import java.io.OutputStream;
|
|
|
e1fe81 |
+import java.security.NoSuchAlgorithmException;
|
|
|
e1fe81 |
+import java.security.Security;
|
|
|
e1fe81 |
+import java.util.concurrent.TimeUnit;
|
|
|
e1fe81 |
+import javax.net.ssl.SSLContext;
|
|
|
e1fe81 |
+import javax.net.ssl.SSLHandshakeException;
|
|
|
e1fe81 |
+import javax.net.ssl.SSLServerSocket;
|
|
|
e1fe81 |
+import javax.net.ssl.SSLServerSocketFactory;
|
|
|
e1fe81 |
+import javax.net.ssl.SSLSocket;
|
|
|
e1fe81 |
+import javax.net.ssl.SSLSocketFactory;
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+/**
|
|
|
e1fe81 |
+ * @test
|
|
|
e1fe81 |
+ * @bug 8076221
|
|
|
e1fe81 |
+ * @summary Check if weak cipher suites are disabled
|
|
|
e1fe81 |
+ * @run main/othervm DisabledAlgorithms default
|
|
|
e1fe81 |
+ * @run main/othervm DisabledAlgorithms empty
|
|
|
e1fe81 |
+ */
|
|
|
e1fe81 |
+public class DisabledAlgorithms {
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ private static final String pathToStores =
|
|
|
e1fe81 |
+ "../../../../sun/security/ssl/etc";
|
|
|
e1fe81 |
+ private static final String keyStoreFile = "keystore";
|
|
|
e1fe81 |
+ private static final String trustStoreFile = "truststore";
|
|
|
e1fe81 |
+ private static final String passwd = "passphrase";
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ private static final String keyFilename =
|
|
|
e1fe81 |
+ System.getProperty("test.src", "./") + "/" + pathToStores +
|
|
|
e1fe81 |
+ "/" + keyStoreFile;
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ private static final String trustFilename =
|
|
|
e1fe81 |
+ System.getProperty("test.src", "./") + "/" + pathToStores +
|
|
|
e1fe81 |
+ "/" + trustStoreFile;
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ // supported RC4 cipher suites
|
|
|
e1fe81 |
+ // it does not contain KRB5 cipher suites because they need a KDC
|
|
|
e1fe81 |
+ private static final String[] rc4_ciphersuites = new String[] {
|
|
|
e1fe81 |
+ "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
|
|
|
e1fe81 |
+ "TLS_ECDHE_RSA_WITH_RC4_128_SHA",
|
|
|
e1fe81 |
+ "SSL_RSA_WITH_RC4_128_SHA",
|
|
|
e1fe81 |
+ "TLS_ECDH_ECDSA_WITH_RC4_128_SHA",
|
|
|
e1fe81 |
+ "TLS_ECDH_RSA_WITH_RC4_128_SHA",
|
|
|
e1fe81 |
+ "SSL_RSA_WITH_RC4_128_MD5",
|
|
|
e1fe81 |
+ "TLS_ECDH_anon_WITH_RC4_128_SHA",
|
|
|
e1fe81 |
+ "SSL_DH_anon_WITH_RC4_128_MD5"
|
|
|
e1fe81 |
+ };
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ public static void main(String[] args) throws Exception {
|
|
|
e1fe81 |
+ if (args.length < 1) {
|
|
|
e1fe81 |
+ throw new RuntimeException("No parameters specified");
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ System.setProperty("javax.net.ssl.keyStore", keyFilename);
|
|
|
e1fe81 |
+ System.setProperty("javax.net.ssl.keyStorePassword", passwd);
|
|
|
e1fe81 |
+ System.setProperty("javax.net.ssl.trustStore", trustFilename);
|
|
|
e1fe81 |
+ System.setProperty("javax.net.ssl.trustStorePassword", passwd);
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ switch (args[0]) {
|
|
|
e1fe81 |
+ case "default":
|
|
|
e1fe81 |
+ // use default jdk.tls.disabledAlgorithms
|
|
|
e1fe81 |
+ System.out.println("jdk.tls.disabledAlgorithms = "
|
|
|
e1fe81 |
+ + Security.getProperty("jdk.tls.disabledAlgorithms"));
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ // check if RC4 cipher suites can't be used by default
|
|
|
e1fe81 |
+ checkFailure(rc4_ciphersuites);
|
|
|
e1fe81 |
+ break;
|
|
|
e1fe81 |
+ case "empty":
|
|
|
e1fe81 |
+ // reset jdk.tls.disabledAlgorithms
|
|
|
e1fe81 |
+ Security.setProperty("jdk.tls.disabledAlgorithms", "");
|
|
|
e1fe81 |
+ System.out.println("jdk.tls.disabledAlgorithms = "
|
|
|
e1fe81 |
+ + Security.getProperty("jdk.tls.disabledAlgorithms"));
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ // check if RC4 cipher suites can be used
|
|
|
e1fe81 |
+ // if jdk.tls.disabledAlgorithms is empty
|
|
|
e1fe81 |
+ checkSuccess(rc4_ciphersuites);
|
|
|
e1fe81 |
+ break;
|
|
|
e1fe81 |
+ default:
|
|
|
e1fe81 |
+ throw new RuntimeException("Wrong parameter: " + args[0]);
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ /*
|
|
|
e1fe81 |
+ * Checks if that specified cipher suites cannot be used.
|
|
|
e1fe81 |
+ */
|
|
|
e1fe81 |
+ private static void checkFailure(String[] ciphersuites) throws Exception {
|
|
|
e1fe81 |
+ try (SSLServer server = SSLServer.init(ciphersuites)) {
|
|
|
e1fe81 |
+ startNewThread(server);
|
|
|
e1fe81 |
+ while (!server.isRunning()) {
|
|
|
e1fe81 |
+ sleep();
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ int port = server.getPort();
|
|
|
e1fe81 |
+ for (String ciphersuite : ciphersuites) {
|
|
|
e1fe81 |
+ try (SSLClient client = SSLClient.init(port, ciphersuite)) {
|
|
|
e1fe81 |
+ client.connect();
|
|
|
e1fe81 |
+ throw new RuntimeException("Expected SSLHandshakeException "
|
|
|
e1fe81 |
+ + "not thrown");
|
|
|
e1fe81 |
+ } catch (SSLHandshakeException e) {
|
|
|
e1fe81 |
+ System.out.println("Expected exception on client side: "
|
|
|
e1fe81 |
+ + e);
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ server.stop();
|
|
|
e1fe81 |
+ while (server.isRunning()) {
|
|
|
e1fe81 |
+ sleep();
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ if (!server.sslError()) {
|
|
|
e1fe81 |
+ throw new RuntimeException("Expected SSL exception "
|
|
|
e1fe81 |
+ + "not thrown on server side");
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ /*
|
|
|
e1fe81 |
+ * Checks if specified cipher suites can be used.
|
|
|
e1fe81 |
+ */
|
|
|
e1fe81 |
+ private static void checkSuccess(String[] ciphersuites) throws Exception {
|
|
|
e1fe81 |
+ try (SSLServer server = SSLServer.init(ciphersuites)) {
|
|
|
e1fe81 |
+ startNewThread(server);
|
|
|
e1fe81 |
+ while (!server.isRunning()) {
|
|
|
e1fe81 |
+ sleep();
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ int port = server.getPort();
|
|
|
e1fe81 |
+ for (String ciphersuite : ciphersuites) {
|
|
|
e1fe81 |
+ try (SSLClient client = SSLClient.init(port, ciphersuite)) {
|
|
|
e1fe81 |
+ client.connect();
|
|
|
e1fe81 |
+ String negotiated = client.getNegotiatedCipherSuite();
|
|
|
e1fe81 |
+ System.out.println("Negotiated cipher suite: "
|
|
|
e1fe81 |
+ + negotiated);
|
|
|
e1fe81 |
+ if (!negotiated.equals(ciphersuite)) {
|
|
|
e1fe81 |
+ throw new RuntimeException("Unexpected cipher suite: "
|
|
|
e1fe81 |
+ + negotiated);
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ server.stop();
|
|
|
e1fe81 |
+ while (server.isRunning()) {
|
|
|
e1fe81 |
+ sleep();
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ if (server.error()) {
|
|
|
e1fe81 |
+ throw new RuntimeException("Unexpected error on server side");
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ private static Thread startNewThread(SSLServer server) {
|
|
|
e1fe81 |
+ Thread serverThread = new Thread(server, "SSL server thread");
|
|
|
e1fe81 |
+ serverThread.setDaemon(true);
|
|
|
e1fe81 |
+ serverThread.start();
|
|
|
e1fe81 |
+ return serverThread;
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ private static void sleep() {
|
|
|
e1fe81 |
+ try {
|
|
|
e1fe81 |
+ TimeUnit.MILLISECONDS.sleep(50);
|
|
|
e1fe81 |
+ } catch (InterruptedException e) {
|
|
|
e1fe81 |
+ // do nothing
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ static class SSLServer implements Runnable, AutoCloseable {
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ private final SSLServerSocket ssocket;
|
|
|
e1fe81 |
+ private volatile boolean stopped = false;
|
|
|
e1fe81 |
+ private volatile boolean running = false;
|
|
|
e1fe81 |
+ private volatile boolean sslError = false;
|
|
|
e1fe81 |
+ private volatile boolean otherError = false;
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ private SSLServer(SSLServerSocket ssocket) {
|
|
|
e1fe81 |
+ this.ssocket = ssocket;
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ @Override
|
|
|
e1fe81 |
+ public void run() {
|
|
|
e1fe81 |
+ System.out.println("Server: started");
|
|
|
e1fe81 |
+ running = true;
|
|
|
e1fe81 |
+ while (!stopped) {
|
|
|
e1fe81 |
+ try (SSLSocket socket = (SSLSocket) ssocket.accept()) {
|
|
|
e1fe81 |
+ System.out.println("Server: accepted client connection");
|
|
|
e1fe81 |
+ InputStream in = socket.getInputStream();
|
|
|
e1fe81 |
+ OutputStream out = socket.getOutputStream();
|
|
|
e1fe81 |
+ int b = in.read();
|
|
|
e1fe81 |
+ if (b < 0) {
|
|
|
e1fe81 |
+ throw new IOException("Unexpected EOF");
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+ System.out.println("Server: send data: " + b);
|
|
|
e1fe81 |
+ out.write(b);
|
|
|
e1fe81 |
+ out.flush();
|
|
|
e1fe81 |
+ socket.getSession().invalidate();
|
|
|
e1fe81 |
+ } catch (SSLHandshakeException e) {
|
|
|
e1fe81 |
+ System.out.println("Server: run: " + e);
|
|
|
e1fe81 |
+ sslError = true;
|
|
|
e1fe81 |
+ } catch (IOException e) {
|
|
|
e1fe81 |
+ if (!stopped) {
|
|
|
e1fe81 |
+ System.out.println("Server: run: " + e);
|
|
|
e1fe81 |
+ e.printStackTrace();
|
|
|
e1fe81 |
+ otherError = true;
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ System.out.println("Server: finished");
|
|
|
e1fe81 |
+ running = false;
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ int getPort() {
|
|
|
e1fe81 |
+ return ssocket.getLocalPort();
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ String[] getEnabledCiperSuites() {
|
|
|
e1fe81 |
+ return ssocket.getEnabledCipherSuites();
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ boolean isRunning() {
|
|
|
e1fe81 |
+ return running;
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ boolean sslError() {
|
|
|
e1fe81 |
+ return sslError;
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ boolean error() {
|
|
|
e1fe81 |
+ return sslError || otherError;
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ void stop() {
|
|
|
e1fe81 |
+ stopped = true;
|
|
|
e1fe81 |
+ if (!ssocket.isClosed()) {
|
|
|
e1fe81 |
+ try {
|
|
|
e1fe81 |
+ ssocket.close();
|
|
|
e1fe81 |
+ } catch (IOException e) {
|
|
|
e1fe81 |
+ System.out.println("Server: close: " + e);
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ @Override
|
|
|
e1fe81 |
+ public void close() {
|
|
|
e1fe81 |
+ stop();
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ static SSLServer init(String[] ciphersuites)
|
|
|
e1fe81 |
+ throws IOException {
|
|
|
e1fe81 |
+ SSLServerSocketFactory ssf = (SSLServerSocketFactory)
|
|
|
e1fe81 |
+ SSLServerSocketFactory.getDefault();
|
|
|
e1fe81 |
+ SSLServerSocket ssocket = (SSLServerSocket)
|
|
|
e1fe81 |
+ ssf.createServerSocket(0);
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ if (ciphersuites != null) {
|
|
|
e1fe81 |
+ System.out.println("Server: enable cipher suites: "
|
|
|
e1fe81 |
+ + java.util.Arrays.toString(ciphersuites));
|
|
|
e1fe81 |
+ ssocket.setEnabledCipherSuites(ciphersuites);
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ return new SSLServer(ssocket);
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ static class SSLClient implements AutoCloseable {
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ private final SSLSocket socket;
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ private SSLClient(SSLSocket socket) {
|
|
|
e1fe81 |
+ this.socket = socket;
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ void connect() throws IOException {
|
|
|
e1fe81 |
+ System.out.println("Client: connect to server");
|
|
|
e1fe81 |
+ try (
|
|
|
e1fe81 |
+ BufferedInputStream bis = new BufferedInputStream(
|
|
|
e1fe81 |
+ socket.getInputStream());
|
|
|
e1fe81 |
+ BufferedOutputStream bos = new BufferedOutputStream(
|
|
|
e1fe81 |
+ socket.getOutputStream())) {
|
|
|
e1fe81 |
+ bos.write('x');
|
|
|
e1fe81 |
+ bos.flush();
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ int read = bis.read();
|
|
|
e1fe81 |
+ if (read < 0) {
|
|
|
e1fe81 |
+ throw new IOException("Client: couldn't read a response");
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+ socket.getSession().invalidate();
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ String[] getEnabledCiperSuites() {
|
|
|
e1fe81 |
+ return socket.getEnabledCipherSuites();
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ String getNegotiatedCipherSuite() {
|
|
|
e1fe81 |
+ return socket.getSession().getCipherSuite();
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ @Override
|
|
|
e1fe81 |
+ public void close() throws Exception {
|
|
|
e1fe81 |
+ if (!socket.isClosed()) {
|
|
|
e1fe81 |
+ try {
|
|
|
e1fe81 |
+ socket.close();
|
|
|
e1fe81 |
+ } catch (IOException e) {
|
|
|
e1fe81 |
+ System.out.println("Client: close: " + e);
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ static SSLClient init(int port)
|
|
|
e1fe81 |
+ throws NoSuchAlgorithmException, IOException {
|
|
|
e1fe81 |
+ return init(port, null);
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ static SSLClient init(int port, String ciphersuite)
|
|
|
e1fe81 |
+ throws NoSuchAlgorithmException, IOException {
|
|
|
e1fe81 |
+ SSLContext context = SSLContext.getDefault();
|
|
|
e1fe81 |
+ SSLSocketFactory ssf = (SSLSocketFactory)
|
|
|
e1fe81 |
+ context.getSocketFactory();
|
|
|
e1fe81 |
+ SSLSocket socket = (SSLSocket) ssf.createSocket("localhost", port);
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ if (ciphersuite != null) {
|
|
|
e1fe81 |
+ System.out.println("Client: enable cipher suite: "
|
|
|
e1fe81 |
+ + ciphersuite);
|
|
|
e1fe81 |
+ socket.setEnabledCipherSuites(new String[] { ciphersuite });
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ return new SSLClient(socket);
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+ }
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
+}
|
|
|
176549 |
diff --git a/test/sun/security/krb5/auto/SSL.java b/test/sun/security/krb5/auto/SSL.java
|
|
|
176549 |
--- openjdk/jdk/test/sun/security/krb5/auto/SSL.java
|
|
|
176549 |
+++ openjdk/jdk/test/sun/security/krb5/auto/SSL.java
|
|
|
e1fe81 |
@@ -1,5 +1,5 @@
|
|
|
e1fe81 |
/*
|
|
|
e1fe81 |
- * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved.
|
|
|
e1fe81 |
+ * Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved.
|
|
|
e1fe81 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
|
e1fe81 |
*
|
|
|
e1fe81 |
* This code is free software; you can redistribute it and/or modify it
|
|
|
e1fe81 |
@@ -40,6 +40,7 @@
|
|
|
e1fe81 |
import java.net.InetAddress;
|
|
|
e1fe81 |
import javax.net.ssl.*;
|
|
|
e1fe81 |
import java.security.Principal;
|
|
|
e1fe81 |
+import java.security.Security;
|
|
|
e1fe81 |
import java.util.Date;
|
|
|
e1fe81 |
import sun.security.jgss.GSSUtil;
|
|
|
e1fe81 |
import sun.security.krb5.PrincipalName;
|
|
|
e1fe81 |
@@ -54,6 +55,9 @@
|
|
|
e1fe81 |
private static volatile int port;
|
|
|
e1fe81 |
|
|
|
e1fe81 |
public static void main(String[] args) throws Exception {
|
|
|
e1fe81 |
+ // reset the security property to make sure that the algorithms
|
|
|
e1fe81 |
+ // and keys used in this test are not disabled.
|
|
|
e1fe81 |
+ Security.setProperty("jdk.tls.disabledAlgorithms", "");
|
|
|
e1fe81 |
|
|
|
e1fe81 |
krb5Cipher = args[0];
|
|
|
e1fe81 |
|
|
|
176549 |
diff --git a/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/ClientHandshaker/CipherSuiteOrder.java b/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/ClientHandshaker/CipherSuiteOrder.java
|
|
|
176549 |
--- openjdk/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/ClientHandshaker/CipherSuiteOrder.java
|
|
|
176549 |
+++ openjdk/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/ClientHandshaker/CipherSuiteOrder.java
|
|
|
e1fe81 |
@@ -1,5 +1,5 @@
|
|
|
e1fe81 |
/*
|
|
|
e1fe81 |
- * Copyright (c) 2001, 2002, Oracle and/or its affiliates. All rights reserved.
|
|
|
e1fe81 |
+ * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
|
|
|
e1fe81 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
|
e1fe81 |
*
|
|
|
e1fe81 |
* This code is free software; you can redistribute it and/or modify it
|
|
|
e1fe81 |
@@ -36,7 +36,7 @@
|
|
|
e1fe81 |
*/
|
|
|
e1fe81 |
|
|
|
e1fe81 |
import java.io.*;
|
|
|
e1fe81 |
-import java.net.*;
|
|
|
e1fe81 |
+import java.security.Security;
|
|
|
e1fe81 |
import javax.net.ssl.*;
|
|
|
e1fe81 |
|
|
|
e1fe81 |
public class CipherSuiteOrder {
|
|
|
e1fe81 |
@@ -198,6 +198,10 @@
|
|
|
e1fe81 |
volatile Exception clientException = null;
|
|
|
e1fe81 |
|
|
|
e1fe81 |
public static void main(String[] args) throws Exception {
|
|
|
e1fe81 |
+ // reset the security property to make sure that the algorithms
|
|
|
e1fe81 |
+ // and keys used in this test are not disabled.
|
|
|
e1fe81 |
+ Security.setProperty("jdk.tls.disabledAlgorithms", "");
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
String keyFilename =
|
|
|
e1fe81 |
System.getProperty("test.src", "./") + "/" + pathToStores +
|
|
|
e1fe81 |
"/" + keyStoreFile;
|
|
|
176549 |
diff --git a/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/DHKeyExchange/DHEKeySizing.java b/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/DHKeyExchange/DHEKeySizing.java
|
|
|
176549 |
--- openjdk/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/DHKeyExchange/DHEKeySizing.java
|
|
|
176549 |
+++ openjdk/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/DHKeyExchange/DHEKeySizing.java
|
|
|
176549 |
@@ -103,10 +103,10 @@
|
|
|
176549 |
import java.security.Security;
|
|
|
e1fe81 |
import java.security.KeyStore;
|
|
|
e1fe81 |
import java.security.KeyFactory;
|
|
|
e1fe81 |
+import java.security.Security;
|
|
|
e1fe81 |
import java.security.cert.Certificate;
|
|
|
e1fe81 |
import java.security.cert.CertificateFactory;
|
|
|
e1fe81 |
import java.security.spec.PKCS8EncodedKeySpec;
|
|
|
e1fe81 |
-import java.security.spec.*;
|
|
|
e1fe81 |
import java.security.interfaces.*;
|
|
|
176549 |
import sun.misc.BASE64Decoder;
|
|
|
e1fe81 |
|
|
|
176549 |
diff --git a/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/CheckStatus.java b/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/CheckStatus.java
|
|
|
176549 |
--- openjdk/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/CheckStatus.java
|
|
|
176549 |
+++ openjdk/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/CheckStatus.java
|
|
|
e1fe81 |
@@ -1,5 +1,5 @@
|
|
|
e1fe81 |
/*
|
|
|
e1fe81 |
- * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
|
|
e1fe81 |
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
|
|
|
e1fe81 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
|
e1fe81 |
*
|
|
|
e1fe81 |
* This code is free software; you can redistribute it and/or modify it
|
|
|
e1fe81 |
@@ -622,6 +622,9 @@
|
|
|
e1fe81 |
}
|
|
|
e1fe81 |
|
|
|
e1fe81 |
public static void main(String args[]) throws Exception {
|
|
|
e1fe81 |
+ // reset the security property to make sure that the algorithms
|
|
|
e1fe81 |
+ // and keys used in this test are not disabled.
|
|
|
e1fe81 |
+ Security.setProperty("jdk.tls.disabledAlgorithms", "");
|
|
|
e1fe81 |
|
|
|
e1fe81 |
CheckStatus cs;
|
|
|
e1fe81 |
|
|
|
176549 |
diff --git a/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/ConnectionTest.java b/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/ConnectionTest.java
|
|
|
176549 |
--- openjdk/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/ConnectionTest.java
|
|
|
176549 |
+++ openjdk/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/ConnectionTest.java
|
|
|
e1fe81 |
@@ -33,6 +33,8 @@
|
|
|
e1fe81 |
* The code could certainly be tightened up a lot.
|
|
|
e1fe81 |
*
|
|
|
e1fe81 |
* @author Brad Wetmore
|
|
|
e1fe81 |
+ *
|
|
|
e1fe81 |
+ * @run main/othervm ConnectionTest
|
|
|
e1fe81 |
*/
|
|
|
e1fe81 |
|
|
|
e1fe81 |
import javax.net.ssl.*;
|
|
|
e1fe81 |
@@ -672,6 +674,10 @@
|
|
|
e1fe81 |
}
|
|
|
e1fe81 |
|
|
|
e1fe81 |
public static void main(String args[]) throws Exception {
|
|
|
e1fe81 |
+ // reset the security property to make sure that the algorithms
|
|
|
e1fe81 |
+ // and keys used in this test are not disabled.
|
|
|
e1fe81 |
+ Security.setProperty("jdk.tls.disabledAlgorithms", "");
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
ConnectionTest ct = new ConnectionTest();
|
|
|
e1fe81 |
ct.test();
|
|
|
e1fe81 |
}
|
|
|
176549 |
diff --git a/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/LargeBufs.java b/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/LargeBufs.java
|
|
|
176549 |
--- openjdk/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/LargeBufs.java
|
|
|
176549 |
+++ openjdk/jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/LargeBufs.java
|
|
|
e1fe81 |
@@ -180,6 +180,9 @@
|
|
|
e1fe81 |
}
|
|
|
e1fe81 |
|
|
|
e1fe81 |
public static void main(String args[]) throws Exception {
|
|
|
e1fe81 |
+ // reset the security property to make sure that the algorithms
|
|
|
e1fe81 |
+ // and keys used in this test are not disabled.
|
|
|
e1fe81 |
+ Security.setProperty("jdk.tls.disabledAlgorithms", "");
|
|
|
e1fe81 |
|
|
|
e1fe81 |
LargeBufs test;
|
|
|
e1fe81 |
|
|
|
176549 |
diff --git a/test/sun/security/ssl/javax/net/ssl/TLSv11/GenericStreamCipher.java b/test/sun/security/ssl/javax/net/ssl/TLSv11/GenericStreamCipher.java
|
|
|
176549 |
--- openjdk/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/GenericStreamCipher.java
|
|
|
176549 |
+++ openjdk/jdk/test/sun/security/ssl/javax/net/ssl/TLSv11/GenericStreamCipher.java
|
|
|
e1fe81 |
@@ -37,7 +37,7 @@
|
|
|
e1fe81 |
*/
|
|
|
e1fe81 |
|
|
|
e1fe81 |
import java.io.*;
|
|
|
e1fe81 |
-import java.net.*;
|
|
|
e1fe81 |
+import java.security.Security;
|
|
|
e1fe81 |
import javax.net.ssl.*;
|
|
|
e1fe81 |
|
|
|
e1fe81 |
public class GenericStreamCipher {
|
|
|
e1fe81 |
@@ -165,6 +165,10 @@
|
|
|
e1fe81 |
volatile Exception clientException = null;
|
|
|
e1fe81 |
|
|
|
e1fe81 |
public static void main(String[] args) throws Exception {
|
|
|
e1fe81 |
+ // reset the security property to make sure that the algorithms
|
|
|
e1fe81 |
+ // and keys used in this test are not disabled.
|
|
|
e1fe81 |
+ Security.setProperty("jdk.tls.disabledAlgorithms", "");
|
|
|
e1fe81 |
+
|
|
|
e1fe81 |
String keyFilename =
|
|
|
e1fe81 |
System.getProperty("test.src", ".") + "/" + pathToStores +
|
|
|
e1fe81 |
"/" + keyStoreFile;
|