In Java 10, root certificates are included as part of the cacerts
file in the Java Runtime Environment (JRE) to establish trust for security protocols like TLS/SSL. Java includes a default set of trusted Certificate Authorities (CAs) in this file. Here’s how you can work with the root certificates in Java 10:
Accessing the Root Certificates
Root certificates in Java 10 are found in the cacerts
file, which is located in the lib/security
directory in your JRE or JDK installation:
- Path for JDK:
<JAVA_HOME>/lib/security/cacerts
- Path for JRE:
<JAVA_HOME>/jre/lib/security/cacerts
(if the setup includes a separate JRE)
Managing Root Certificates Using the keytool
Utility
Java provides the keytool
command-line utility to manage keystores such as cacerts
. You can use it to list, add, or remove root certificates. Here’s how:
1. List Certificates
To view the existing certificates in the cacerts
keystore, use the following command:
keytool -list -keystore <JAVA_HOME>/lib/security/cacerts
By default, the password for the cacerts
keystore is changeit
.
2. Import a New Root Certificate
If you have a custom root certificate (e.g., mycert.crt
) that needs to be trusted by Java, import it as follows:
keytool -import -trustcacerts -file mycert.crt -keystore <JAVA_HOME>/lib/security/cacerts -alias myalias
- Replace
mycert.crt
with the file path of your certificate. - Replace
myalias
with a unique alias for the certificate. - Note: If no password change has been applied, the default password is
changeit
.
3. Remove a Certificate
If you need to remove a root certificate from the cacerts
keystore:
keytool -delete -alias myalias -keystore <JAVA_HOME>/lib/security/cacerts
Replace myalias
with the alias of the certificate you want to remove.
4. Change Keystore Password
To change the default password (changeit
) for the keystore:
keytool -storepasswd -keystore <JAVA_HOME>/lib/security/cacerts
Exporting Certificates
To export a certificate from the keystore:
keytool -export -alias myalias -file mycert.crt -keystore <JAVA_HOME>/lib/security/cacerts
Troubleshooting and Tips
- Backup Before Modifying: Always create a backup of the
cacerts
file before making changes. If something goes wrong, you can restore the original file.cp <JAVA_HOME>/lib/security/cacerts <JAVA_HOME>/lib/security/cacerts.bak
- Certificate Format: Ensure that the certificates you are working with are in the correct format. Java usually requires certificates in PEM or DER format.
-
Java Home Environment Variable: Ensure the
JAVA_HOME
environment variable is set correctly to point to your Java 10 installation. -
Truststore for Applications: Applications that need a specific set of certificates can use a custom keystore/truststore by specifying the following JVM arguments:
-Djavax.net.ssl.trustStore=/path/to/custom/truststore -Djavax.net.ssl.trustStorePassword=yourpassword
Switching to a Custom Truststore
If you prefer to use a custom truststore instead of altering the cacerts
file:
- Create a new keystore file:
keytool -genkey -alias myalias -keyalg RSA -keystore mytruststore.jks
- Add certificates to this custom truststore using the steps outlined above.
- Point the application or JVM to your custom truststore using the
-Djavax.net.ssl.trustStore
parameter.
Conclusion
Working with the root certificates in Java 10 provides more control over establishing trust with certificate authorities. Tools like keytool
simplify this management process, whether you’re adding, removing, or listing certificates in the cacerts
keystore. Always follow security best practices when modifying trust settings, and ensure critical backups are in place.