** Description changed:

+ [Impact]
+ Any user already affected by the issue described in bug 1739631 won't benefit 
from the fix as that fix only prevents the issue from happening in new installs.
+ 
+ [Cause]
+ Same as described in bug 1739631 and copied here.
+ 
+ The ca-certificate-java version 20170930 (or earlier) used the default 
keystore to create /etc/ssl/certs/java/cacerts - if the file already existed 
its contents were just updated without changing the keystore
+ type.
+ 
+ From openjdk-9 upwards the default keystore type changed from 'jks' to
+ 'pkcs12' [1] by means of JEP 229 [2]. A JKS keystore can be read without
+ supplying a password (or by supplying an empty one) while a PKCS12
+ keystore requires a password to be set.
+ 
+ Thus a /etc/ssl/certs/java/cacerts created in the pkcs12 format will
+ fail to be loaded as, by default, the truststore password is empty - in
+ order to avoid that the user must set
+ -Djavax.net.ssl.trustStorePassword=<passwd> or define it in /etc/java-
+ XX-openjdk/management/management.properties. A JKS keystore will work
+ normally, as the certificates in it can be ready when the truststore
+ password is empty.
+ 
+ Ubuntu does *not* set the javax.net.ssl.trustStorePassword by default
+ thus any user that got a cacerts generated in JKCS12 won't be able
+ to use any secure connections from java.
+ 
+ 
+ [Test Case]
+ Start on a new bionic install/chroot without openjdk
+ 
+ 1. Install openjdk-11
+ $ sudo apt-get install openjdk-11-jdk
+ 
+ 2. Test the keystore with an empty password (optional) and make sure it is a 
PKCS12
+ $ keytool -list -cacerts
+ Enter keystore password: <leave empty>
+ ***************** WARNING WARNING WARNING *****************
+ * The integrity of the information stored in your keystore *
+ * has NOT been verified! In order to verify its integrity, *
+ * you must provide your keystore password. *
+ ***************** WARNING WARNING WARNING *****************
+ Keystore type: PKCS12
+ Keystore provider: SUN
+ Your keystore contains 0 entries
+ 
+ 3. Test with the "changeit" password
+ $ keytool -list -cacerts
+ Enter keystore password: changeit
+ Keystore type: PKCS12
+ Keystore provider: SUN
+ Your keystore contains 133 entries
+ <snipped various certs>
+ 
+ 4. Create the java test file
+ $ cat <<EOF >HttpsTester.java
+ import java.net.URL;
+ import javax.net.ssl.HttpsURLConnection;
+ public class HttpsTester {
+ public static void main(String[] args) throws java.io.IOException {
+ HttpsURLConnection connection = (HttpsURLConnection) new 
URL("https://www.ubuntu.com";).openConnection();
+ System.out.println("Response code: " + connection.getResponseCode());
+ System.out.println("It worked!");
+ }
+ }
+ EOF
+ 
+ 5. Compile it
+ $ javac HttpsTester.java
+ 
+ 6. Call it
+ $ /usr/lib/jvm/java-11-openjdk-amd64/bin/java HttpsTester
+ 
+ 7. Call it again, this time set the store password
+ $ /usr/lib/jvm/java-11-openjdk-amd64/bin/java \
+   -Djavax.net.ssl.trustStorePassword=changeit HttpsTester
+ Response code: 200
+ It worked!
+ 
+ 8. Install the newer ca-certificates-java 20180516, it should
+ migrate cacerts from PKCS12 to JKS. Check that by running step #2
+ again
+ $ keytool -list -cacerts
+ Enter keystore password: <leave empty>
+ ***************** WARNING WARNING WARNING *****************
+ * The integrity of the information stored in your keystore *
+ * has NOT been verified! In order to verify its integrity, *
+ * you must provide your keystore password. *
+ ***************** WARNING WARNING WARNING *****************
+ Keystore type: JKS
+ Keystore provider: SUN
+ Your keystore contains 133 entries
+ <snipped various certs>
+ 
+ 9. The old keystore should be saved in
+ /etc/ssl/certs/java/cacerts.dpkg-old, test it exists:
+ $ keytool -list -keystore /etc/ssl/certs/java/cacerts.dpkg-old
+ Enter keystore password: <leave empty>
+ ***************** WARNING WARNING WARNING *****************
+ * The integrity of the information stored in your keystore *
+ * has NOT been verified! In order to verify its integrity, *
+ * you must provide your keystore password. *
+ ***************** WARNING WARNING WARNING *****************
+ Keystore type: PKCS12
+ Keystore provider: SUN
+ Your keystore contains 0 entries
+ 
+ 
+ [Regression Potential]
+ * If a user has manually set his own JKCS12 cacerts and didn't update
+ /etc/default/cacerts to set "cacerts_updates=no" (from the default
+ of "cacerts_updates=yes") then his custom cacerts will be converted and 
overwritten. Still, a copy from the previous cacert is kept at
+ /etc/ssl/certs/java/cacerts.dpkg-old.
+ 
+ [Other Info]
+ The cacerts keystore fix is related to 2 bugs:
+ 1) bug #1739631, fixed by ca-certificates-java-20180413, which changed the 
default keystore type generated by ca-certificates-java to JKS
+ 
+ [References]
+ [1] The default keystore is defined by the keystore.type in the
+ /etc/java-XX-openjdk/security/java.security file.
+ 
http://hg.openjdk.java.net/jdk-updates/jdk9u/jdk/annotate/46bd35a597eb/src/java.base/share/conf/security/java.security#l186
+ 
+ [2] JEP 229: Create PKCS12 Keystores by Default
+ http://openjdk.java.net/jeps/229
+ 
+ [Original bug description]
  The fix for Debian #894979 and Ubuntu bug #1739631 which updated 
ca-certificates-java to generate
  JKS keystores by default - instead OpenJDK's 9+ default of PKCS12 - only 
fixes new installs.
  
  Any user already affected by that issue won't benefit from the fix, as the 
file /etc/ssl/certs/java/cacerts is at most updated by the jks-keystore hook. 
The only way to actually change it from the PKCS12 to the JKS format is to 
remove the cacerts file and then calling
  'update-ca-certificates -f' - which is also accomplished by removing and then 
reinstalling the ca-certificates-java package.

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1771363

Title:
  ca-certificates-java: convert PKCS12 cacerts keystore to JKS

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/ca-certificates-java/+bug/1771363/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to