Blame SOURCES/pr2888-rh2055274-support_system_cacerts-8139f2361c2.patch

f0e2fb
diff --git a/jdk/src/share/classes/sun/security/ssl/TrustStoreManager.java b/jdk/src/share/classes/sun/security/ssl/TrustStoreManager.java
f0e2fb
index e7b4763db53..0005e56f528 100644
f0e2fb
--- a/jdk/src/share/classes/sun/security/ssl/TrustStoreManager.java
f0e2fb
+++ b/jdk/src/share/classes/sun/security/ssl/TrustStoreManager.java
f0e2fb
@@ -31,6 +31,7 @@ import java.security.*;
f0e2fb
 import java.security.cert.*;
f0e2fb
 import java.util.*;
f0e2fb
 import sun.security.action.*;
f0e2fb
+import sun.security.tools.KeyStoreUtil;
f0e2fb
 import sun.security.validator.TrustStoreUtil;
f0e2fb
 
f0e2fb
 /**
f0e2fb
@@ -68,7 +69,7 @@ final class TrustStoreManager {
f0e2fb
      * The preference of the default trusted KeyStore is:
f0e2fb
      *    javax.net.ssl.trustStore
f0e2fb
      *    jssecacerts
f0e2fb
-     *    cacerts
f0e2fb
+     *    cacerts (system and local)
f0e2fb
      */
f0e2fb
     private static final class TrustStoreDescriptor {
f0e2fb
         private static final String fileSep = File.separator;
f0e2fb
@@ -76,7 +77,8 @@ final class TrustStoreManager {
f0e2fb
                 GetPropertyAction.privilegedGetProperty("java.home") +
f0e2fb
                 fileSep + "lib" + fileSep + "security";
f0e2fb
         private static final String defaultStore =
f0e2fb
-                defaultStorePath + fileSep + "cacerts";
f0e2fb
+                AccessController.doPrivileged((PrivilegedAction<String>) () ->
f0e2fb
+                        KeyStoreUtil.getCacertsKeyStorePath());
f0e2fb
         private static final String jsseDefaultStore =
f0e2fb
                 defaultStorePath + fileSep + "jssecacerts";
f0e2fb
 
f0e2fb
@@ -139,6 +141,10 @@ final class TrustStoreManager {
f0e2fb
                     String storePropPassword = System.getProperty(
f0e2fb
                             "javax.net.ssl.trustStorePassword", "");
f0e2fb
 
f0e2fb
+                    if (SSLLogger.isOn && SSLLogger.isOn("trustmanager")) {
f0e2fb
+                        SSLLogger.fine("Default store: " + defaultStore);
f0e2fb
+                    }
f0e2fb
+
f0e2fb
                     String temporaryName = "";
f0e2fb
                     File temporaryFile = null;
f0e2fb
                     long temporaryTime = 0L;
f0e2fb
@@ -160,7 +166,7 @@ final class TrustStoreManager {
f0e2fb
                                     SSLLogger.isOn("trustmanager")) {
f0e2fb
                                 SSLLogger.fine(
f0e2fb
                                         "Inaccessible trust store: " +
f0e2fb
-                                        storePropName);
f0e2fb
+                                        fileName);
f0e2fb
                             }
f0e2fb
                         }
f0e2fb
                     } else {
f0e2fb
diff --git a/jdk/src/share/classes/sun/security/tools/KeyStoreUtil.java b/jdk/src/share/classes/sun/security/tools/KeyStoreUtil.java
f0e2fb
index fcc77786da1..3a4388964cc 100644
f0e2fb
--- a/jdk/src/share/classes/sun/security/tools/KeyStoreUtil.java
f0e2fb
+++ b/jdk/src/share/classes/sun/security/tools/KeyStoreUtil.java
f0e2fb
@@ -41,6 +41,8 @@ import java.text.Collator;
f0e2fb
 import java.util.Locale;
f0e2fb
 import java.util.ResourceBundle;
f0e2fb
 
f0e2fb
+import sun.security.util.SecurityProperties;
f0e2fb
+
f0e2fb
 /**
f0e2fb
  * 

This class provides several utilities to KeyStore.

f0e2fb
  *
f0e2fb
@@ -54,6 +56,8 @@ public class KeyStoreUtil {
f0e2fb
 
f0e2fb
     private static final String JKS = "jks";
f0e2fb
 
f0e2fb
+    private static final String SYSTEM_CA_CERTS_PROP = "security.systemCACerts";
f0e2fb
+
f0e2fb
     /**
f0e2fb
      * Returns true if the certificate is self-signed, false otherwise.
f0e2fb
      */
f0e2fb
@@ -96,16 +100,30 @@ public class KeyStoreUtil {
f0e2fb
         }
f0e2fb
     }
f0e2fb
 
f0e2fb
+    /**
f0e2fb
+     * Returns the path to the cacerts DB
f0e2fb
+     */
f0e2fb
+    public static String getCacertsKeyStorePath()
f0e2fb
+    {
f0e2fb
+        // Check system DB first, preferring system property over security one
f0e2fb
+        String systemDB = SecurityProperties
f0e2fb
+                .privilegedGetOverridable(SYSTEM_CA_CERTS_PROP);
f0e2fb
+        if (systemDB != null && !"".equals(systemDB) &&
f0e2fb
+                (new File(systemDB)).isFile()) {
f0e2fb
+            return systemDB;
f0e2fb
+        }
f0e2fb
+        String sep = File.separator;
f0e2fb
+        return System.getProperty("java.home") + sep
f0e2fb
+                + "lib" + sep + "security" + sep + "cacerts";
f0e2fb
+    }
f0e2fb
+
f0e2fb
     /**
f0e2fb
      * Returns the keystore with the configured CA certificates.
f0e2fb
      */
f0e2fb
     public static KeyStore getCacertsKeyStore()
f0e2fb
         throws Exception
f0e2fb
     {
f0e2fb
-        String sep = File.separator;
f0e2fb
-        File file = new File(System.getProperty("java.home") + sep
f0e2fb
-                             + "lib" + sep + "security" + sep
f0e2fb
-                             + "cacerts");
f0e2fb
+        File file = new File(getCacertsKeyStorePath());
f0e2fb
         if (!file.exists()) {
f0e2fb
             return null;
f0e2fb
         }
f0e2fb
diff --git a/jdk/src/share/lib/security/java.security-aix b/jdk/src/share/lib/security/java.security-aix
f0e2fb
index 681a24b905d..ecb8bc43a6c 100644
f0e2fb
--- a/jdk/src/share/lib/security/java.security-aix
f0e2fb
+++ b/jdk/src/share/lib/security/java.security-aix
f0e2fb
@@ -294,6 +294,12 @@ security.overridePropertiesFile=true
f0e2fb
 #
f0e2fb
 security.useSystemPropertiesFile=false
f0e2fb
 
f0e2fb
+#
f0e2fb
+# Specifies the system certificate store
f0e2fb
+# This property may be disabled using an empty value
f0e2fb
+#
f0e2fb
+security.systemCACerts=${java.home}/lib/security/cacerts
f0e2fb
+
f0e2fb
 #
f0e2fb
 # Determines the default key and trust manager factory algorithms for
f0e2fb
 # the javax.net.ssl package.
f0e2fb
diff --git a/jdk/src/share/lib/security/java.security-linux b/jdk/src/share/lib/security/java.security-linux
f0e2fb
index 789c19a8cba..2546fdec9b2 100644
f0e2fb
--- a/jdk/src/share/lib/security/java.security-linux
f0e2fb
+++ b/jdk/src/share/lib/security/java.security-linux
f0e2fb
@@ -307,6 +307,12 @@ security.overridePropertiesFile=true
f0e2fb
 #
f0e2fb
 security.useSystemPropertiesFile=false
f0e2fb
 
f0e2fb
+#
f0e2fb
+# Specifies the system certificate store
f0e2fb
+# This property may be disabled using an empty value
f0e2fb
+#
f0e2fb
+security.systemCACerts=${java.home}/lib/security/cacerts
f0e2fb
+
f0e2fb
 #
f0e2fb
 # Determines the default key and trust manager factory algorithms for
f0e2fb
 # the javax.net.ssl package.
f0e2fb
diff --git a/jdk/src/share/lib/security/java.security-macosx b/jdk/src/share/lib/security/java.security-macosx
f0e2fb
index d4da666af3b..1a20027c02b 100644
f0e2fb
--- a/jdk/src/share/lib/security/java.security-macosx
f0e2fb
+++ b/jdk/src/share/lib/security/java.security-macosx
f0e2fb
@@ -297,6 +297,12 @@ security.overridePropertiesFile=true
f0e2fb
 #
f0e2fb
 security.useSystemPropertiesFile=false
f0e2fb
 
f0e2fb
+#
f0e2fb
+# Specifies the system certificate store
f0e2fb
+# This property may be disabled using an empty value
f0e2fb
+#
f0e2fb
+security.systemCACerts=${java.home}/lib/security/cacerts
f0e2fb
+
f0e2fb
 #
f0e2fb
 # Determines the default key and trust manager factory algorithms for
f0e2fb
 # the javax.net.ssl package.
f0e2fb
diff --git a/jdk/src/share/lib/security/java.security-solaris b/jdk/src/share/lib/security/java.security-solaris
f0e2fb
index 300132384a1..6299e0a3c7b 100644
f0e2fb
--- a/jdk/src/share/lib/security/java.security-solaris
f0e2fb
+++ b/jdk/src/share/lib/security/java.security-solaris
f0e2fb
@@ -295,6 +295,12 @@ security.overridePropertiesFile=true
f0e2fb
 #
f0e2fb
 security.useSystemPropertiesFile=false
f0e2fb
 
f0e2fb
+#
f0e2fb
+# Specifies the system certificate store
f0e2fb
+# This property may be disabled using an empty value
f0e2fb
+#
f0e2fb
+security.systemCACerts=${java.home}/lib/security/cacerts
f0e2fb
+
f0e2fb
 #
f0e2fb
 # Determines the default key and trust manager factory algorithms for
f0e2fb
 # the javax.net.ssl package.
f0e2fb
diff --git a/jdk/src/share/lib/security/java.security-windows b/jdk/src/share/lib/security/java.security-windows
f0e2fb
index 64db5a5cd1e..823994f3466 100644
f0e2fb
--- a/jdk/src/share/lib/security/java.security-windows
f0e2fb
+++ b/jdk/src/share/lib/security/java.security-windows
f0e2fb
@@ -297,6 +297,12 @@ security.overridePropertiesFile=true
f0e2fb
 #
f0e2fb
 security.useSystemPropertiesFile=false
f0e2fb
 
f0e2fb
+#
f0e2fb
+# Specifies the system certificate store
f0e2fb
+# This property may be disabled using an empty value
f0e2fb
+#
f0e2fb
+security.systemCACerts=${java.home}/lib/security/cacerts
f0e2fb
+
f0e2fb
 #
f0e2fb
 # Determines the default key and trust manager factory algorithms for
f0e2fb
 # the javax.net.ssl package.