b0499a
From 1970d6bf47e4ce3a43de370ada5c3e882d7a7cb0 Mon Sep 17 00:00:00 2001
b0499a
From: Christina Fu <cfu@redhat.com>
b0499a
Date: Fri, 29 Jun 2018 15:04:43 -0700
b0499a
Subject: [PATCH] Ticket #11 Add support for TLS_*_SHA384 ciphers
b0499a
b0499a
This patch adds support for TLS_*_SHA384 ciphers which NSS now supports.
b0499a
b0499a
fixes: https://pagure.io/tomcatjss/issue/11
b0499a
---
b0499a
 .../tomcat/util/net/jss/JSSSocketFactory.java      | 43 +++++++++++++++++++++-
b0499a
 1 file changed, 41 insertions(+), 2 deletions(-)
b0499a
b0499a
diff --git a/src/org/apache/tomcat/util/net/jss/JSSSocketFactory.java b/src/org/apache/tomcat/util/net/jss/JSSSocketFactory.java
b0499a
index f974a89..b38b091 100644
b0499a
--- a/src/org/apache/tomcat/util/net/jss/JSSSocketFactory.java
b0499a
+++ b/src/org/apache/tomcat/util/net/jss/JSSSocketFactory.java
b0499a
@@ -290,6 +290,22 @@ public class JSSSocketFactory implements
b0499a
                 SSLSocket.TLS_ECDH_RSA_WITH_AES_128_CBC_SHA);
b0499a
         cipherMap.put("TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA",
b0499a
                 SSLSocket.TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA);
b0499a
+
b0499a
+        // TLS_*_SHA384
b0499a
+        cipherMap.put("TLS_RSA_WITH_AES_256_GCM_SHA384",
b0499a
+                SSLSocket.TLS_RSA_WITH_AES_256_GCM_SHA384);
b0499a
+        cipherMap.put("TLS_DHE_RSA_WITH_AES_256_GCM_SHA384",
b0499a
+                SSLSocket.TLS_DHE_RSA_WITH_AES_256_GCM_SHA384);
b0499a
+        cipherMap.put("TLS_DHE_DSS_WITH_AES_256_GCM_SHA384",
b0499a
+                SSLSocket.TLS_DHE_DSS_WITH_AES_256_GCM_SHA384);
b0499a
+        cipherMap.put("TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384",
b0499a
+                SSLSocket.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384);
b0499a
+        cipherMap.put("TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384",
b0499a
+                SSLSocket.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384);
b0499a
+        cipherMap.put("TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
b0499a
+                SSLSocket.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384);
b0499a
+        cipherMap.put("TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
b0499a
+                SSLSocket.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384);
b0499a
     }
b0499a
 
b0499a
     private static HashMap<Integer, String> eccCipherMap = new HashMap<Integer, String>();
b0499a
@@ -338,6 +354,22 @@ public class JSSSocketFactory implements
b0499a
         eccCipherMap.put(SSLSocket.TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,
b0499a
                 "TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256");
b0499a
 */
b0499a
+
b0499a
+        // TLS_*_SHA384
b0499a
+        eccCipherMap.put(SSLSocket.TLS_RSA_WITH_AES_256_GCM_SHA384,
b0499a
+                "TLS_RSA_WITH_AES_256_GCM_SHA384");
b0499a
+        eccCipherMap.put(SSLSocket.TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,
b0499a
+                "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384");
b0499a
+        eccCipherMap.put(SSLSocket.TLS_DHE_DSS_WITH_AES_256_GCM_SHA384,
b0499a
+                "TLS_DHE_DSS_WITH_AES_256_GCM_SHA384");
b0499a
+        eccCipherMap.put(SSLSocket.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,
b0499a
+                "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384");
b0499a
+        eccCipherMap.put(SSLSocket.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
b0499a
+                "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384");
b0499a
+        eccCipherMap.put(SSLSocket.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
b0499a
+                "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384");
b0499a
+        eccCipherMap.put(SSLSocket.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
b0499a
+                "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384");
b0499a
     }
b0499a
 
b0499a
     private AbstractEndpoint endpoint;
b0499a
@@ -429,23 +461,30 @@ public class JSSSocketFactory implements
b0499a
             }
b0499a
             if (cipherid != 0) {
b0499a
                 try {
b0499a
-                    debugWrite("JSSSocketFactory setSSLCiphers:  " + cipherstr
b0499a
+                    debugWrite("JSSSocketFactory setSSLCiphers: setting: " + cipherstr
b0499a
                             + ": 0x" + Integer.toHexString(cipherid) + "\n");
b0499a
                     SSLSocket.setCipherPreferenceDefault(cipherid, state);
b0499a
+                    debugWrite("JSSSocketFactory setSSLCiphers: done setting: " + cipherstr
b0499a
+                            + ": 0x" + Integer.toHexString(cipherid) + "\n");
b0499a
                 } catch (Exception e) {
b0499a
-                    System.err.println("SSLSocket.setCipherPreferenceDefault exception:" +e);
b0499a
+                    String errMsg = "SSLSocket.setCipherPreferenceDefault exception on: " + cipherstr + " : " +e;
b0499a
+                    System.err.println(errMsg);
b0499a
+                    debugWrite("JSSSocketFactory setSSLCiphers: " + errMsg);
b0499a
                     if (eccCipherMap.containsKey(cipherid)) {
b0499a
+                        debugWrite("JSSSocketFactory setSSLCiphers: Warning: cipher exists in eccCipherMap");
b0499a
                         System.err
b0499a
                                 .println("Warning: SSL ECC cipher \""
b0499a
                                         + text
b0499a
                                         + "\" unsupported by NSS. "
b0499a
                                         + "This is probably O.K. unless ECC support has been installed.");
b0499a
                     } else {
b0499a
+                        debugWrite("JSSSocketFactory setSSLCiphers: Error: cipher does not exist in eccCipherMap");
b0499a
                         System.err.println("Error: SSL cipher \"" + text
b0499a
                                 + "\" unsupported by NSS");
b0499a
                     }
b0499a
                 }
b0499a
             } else {
b0499a
+                debugWrite("JSSSocketFactory setSSLCiphers: Error: cipher not recognized by tomcatjss");
b0499a
                 System.err.println("Error: SSL cipher \"" + text
b0499a
                         + "\" not recognized by tomcatjss");
b0499a
             }
b0499a
-- 
b0499a
2.14.4
b0499a