Skip to main content

Java Keytool Commands Cheatsheet

A quick reference for Java keytool commands used for managing keystores, certificates, key pairs, and trust stores.

Keystore Types

TypeDescription
JKSJava KeyStore (legacy, Java-specific format).
PKCS12Industry-standard format (recommended, cross-platform).
JCEKSJava Cryptography Extension KeyStore (supports secret keys).

Creating Keystores & Key Pairs

CommandWhat It Does
keytool -genkeypair -alias mykey -keyalg RSA -keysize 2048 -keystore keystore.jksGenerates an RSA key pair and self-signed certificate in JKS.
keytool -genkeypair -alias mykey -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore keystore.p12Generates a key pair in PKCS12 format.
keytool -genkeypair -alias mykey -keyalg EC -groupname secp256r1 -keystore keystore.p12Generates an EC key pair using P-256 curve.
keytool -genkeypair -alias mykey -keyalg RSA -keysize 4096 -validity 365 -keystore keystore.jks -dname "CN=myserver,OU=IT,O=Company,L=City,ST=State,C=US"Generates a key pair with specified distinguished name and validity.
keytool -genkeypair -alias mykey -keyalg RSA -keysize 2048 -ext san=dns:example.com,dns:www.example.com,ip:192.168.1.1 -keystore keystore.jksGenerates a key pair with Subject Alternative Names (SAN).

Listing Keystore Contents

CommandWhat It Does
keytool -list -keystore keystore.jksLists all entries in the keystore (summary).
keytool -list -v -keystore keystore.jksLists all entries with full details.
keytool -list -v -alias mykey -keystore keystore.jksShows details for a specific alias.
keytool -list -rfc -keystore keystore.jksLists certificates in PEM format.
keytool -list -v -keystore keystore.p12 -storetype PKCS12Lists PKCS12 keystore contents.
keytool -list -v -keystore $JAVA_HOME/lib/security/cacerts -storepass changeitLists the default Java trust store.

Certificate Signing Requests (CSR)

CommandWhat It Does
keytool -certreq -alias mykey -keystore keystore.jks -file request.csrGenerates a CSR for an existing key pair.
keytool -certreq -alias mykey -ext san=dns:example.com -keystore keystore.jks -file request.csrGenerates a CSR with SAN extension.
keytool -printcertreq -file request.csrDisplays CSR contents.

Importing Certificates

CommandWhat It Does
keytool -importcert -alias myca -file ca.crt -keystore truststore.jksImports a CA certificate into a trust store.
keytool -importcert -alias myca -file ca.crt -keystore truststore.jks -trustcacertsImports a CA certificate as a trusted CA.
keytool -importcert -alias mykey -file signed.crt -keystore keystore.jksImports a signed certificate reply for an existing key.
keytool -importcert -alias myca -file ca.crt -keystore $JAVA_HOME/lib/security/cacerts -storepass changeitImports a CA into the default Java trust store.
keytool -importcert -alias mykey -file cert.pem -keystore keystore.jks -nopromptImports without confirmation prompt.

Exporting Certificates

CommandWhat It Does
keytool -exportcert -alias mykey -keystore keystore.jks -file cert.derExports certificate in DER format.
keytool -exportcert -alias mykey -keystore keystore.jks -file cert.pem -rfcExports certificate in PEM format.
keytool -exportcert -alias mykey -keystore keystore.p12 -storetype PKCS12 -file cert.pem -rfcExports from PKCS12 in PEM format.

Viewing Certificates

CommandWhat It Does
keytool -printcert -file cert.pemDisplays certificate details from a file.
keytool -printcert -file cert.derDisplays DER-encoded certificate details.
keytool -printcert -sslserver host:443Displays server certificate from a remote host.
keytool -printcert -sslserver host:443 -rfcDownloads server certificate in PEM format.
keytool -printcert -jarfile myapp.jarShows certificate used to sign a JAR file.

Deleting Entries

CommandWhat It Does
keytool -delete -alias mykey -keystore keystore.jksDeletes an entry from the keystore.
keytool -delete -alias oldca -keystore $JAVA_HOME/lib/security/cacerts -storepass changeitRemoves a CA from the default trust store.

Modifying Entries

CommandWhat It Does
keytool -changealias -alias oldname -destalias newname -keystore keystore.jksRenames an alias.
keytool -storepasswd -keystore keystore.jksChanges the keystore password.
keytool -keypasswd -alias mykey -keystore keystore.jksChanges the password for a specific key entry.

Keystore Conversion

CommandWhat It Does
keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.p12 -deststoretype PKCS12Converts JKS to PKCS12.
keytool -importkeystore -srckeystore keystore.p12 -srcstoretype PKCS12 -destkeystore keystore.jks -deststoretype JKSConverts PKCS12 to JKS.
keytool -importkeystore -srckeystore source.jks -destkeystore dest.jks -srcalias mykey -destalias newkeyCopies a specific entry between keystores.
keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.p12 -deststoretype PKCS12 -srcalias mykeyExports a single alias to PKCS12.

Working with PKCS12 Files

CommandWhat It Does
keytool -list -v -keystore bundle.p12 -storetype PKCS12Lists contents of a PKCS12 file.
keytool -importkeystore -srckeystore bundle.p12 -srcstoretype PKCS12 -destkeystore keystore.jksImports PKCS12 into JKS.
keytool -exportcert -alias 1 -keystore bundle.p12 -storetype PKCS12 -file cert.pem -rfcExports certificate from PKCS12.

Trust Store Management

CommandWhat It Does
keytool -list -v -keystore $JAVA_HOME/lib/security/cacerts -storepass changeitLists default Java CA certificates.
keytool -importcert -alias customca -file ca.crt -keystore truststore.jks -storetype JKSCreates a custom trust store with a CA.
keytool -list -keystore truststore.jks | grep -i "alias"Searches for aliases in a trust store.

Verification & Debugging

CommandWhat It Does
keytool -list -v -alias mykey -keystore keystore.jks | grep -i "valid"Checks certificate validity dates.
keytool -list -v -alias mykey -keystore keystore.jks | grep -i "sha256"Shows certificate fingerprint.
keytool -printcert -sslserver host:443 | grep -i "valid"Checks remote server certificate validity.

Common Options Reference

OptionDescription
-keystore <file>Specifies the keystore file path.
-storetype <type>Specifies keystore type (JKS, PKCS12, JCEKS).
-storepass <password>Keystore password (use :env or :file prefix for security).
-keypass <password>Private key password.
-alias <name>Entry alias name.
-validity <days>Certificate validity period in days.
-dname <name>Distinguished name for certificate subject.
-ext <extension>X.509 extension (e.g., san=dns:example.com).
-vVerbose output.
-rfcOutput in PEM/RFC format.
-nopromptSkip confirmation prompts.
-trustcacertsTrust certificates from cacerts file.
tip

The default Java trust store is located at $JAVA_HOME/lib/security/cacerts with the default password changeit. Always use PKCS12 format for new keystores as JKS is deprecated.

warning

Never use -storepass or -keypass with plain text passwords in production scripts. Use environment variables or password files instead:

  • -storepass:env KEYSTORE_PASS
  • -storepass:file /path/to/password.txt