How to Extract .key and .crt Files from PKCS12 (.p12) Certificate Using OpenSSL


36 views

PKCS12 (also known as PFX) files are common certificate containers that bundle both the certificate and private key in a single encrypted file. This format is widely used for secure certificate distribution.

You'll need OpenSSL installed on your system. Most Linux distributions have it pre-installed. For Windows, you can get it from Win32 OpenSSL or use WSL.

Run this command to extract the private key:


openssl pkcs12 -in certificate.p12 -nocerts -out private.key -nodes

You'll be prompted for:
1. The PKCS12 file password
2. A new passphrase for the output key (press Enter for no password)

To extract the certificate:


openssl pkcs12 -in certificate.p12 -nokeys -out certificate.crt

Enter the PKCS12 password when prompted.

Check your private key:


openssl rsa -in private.key -check

View your certificate:


openssl x509 -in certificate.crt -text -noout

You can extract both components at once:


openssl pkcs12 -in certificate.p12 -out private.key -nodes -nocerts
openssl pkcs12 -in certificate.p12 -out certificate.crt -nokeys

Problem: "unable to load private key" error
Solution: Try adding -legacy flag for older OpenSSL versions

Problem: Incorrect password
Solution: Double-check the PKCS12 password or try password-less extraction


The PKCS#12 format (usually with .p12 or .pfx extension) is a binary format for storing cryptographic objects like private keys, certificates, and chain certificates. It's commonly used for secure key distribution and is password-protected by default.

Before proceeding, ensure you have:

  • OpenSSL installed (comes pre-installed on most Unix systems)
  • The PKCS12 file you want to extract from
  • The password for the PKCS12 file

Here's the fundamental OpenSSL command to extract the private key:

openssl pkcs12 -in certificate.p12 -nocerts -out key.pem -nodes

To extract the certificate:

openssl pkcs12 -in certificate.p12 -clcerts -nokeys -out cert.pem

For a more comprehensive extraction that gives you both files in one go:

# Extract private key
openssl pkcs12 -in yourfile.p12 -nocerts -out private.key -nodes

# Extract certificate
openssl pkcs12 -in yourfile.p12 -clcerts -nokeys -out certificate.crt

# Optional: Extract CA certificates
openssl pkcs12 -in yourfile.p12 -cacerts -nokeys -out cacerts.crt

Let's walk through a concrete example with a sample PKCS12 file:

# First, let's create a test PKCS12 file (for demonstration)
openssl req -x509 -newkey rsa:2048 -keyout test.key -out test.crt -days 365 -nodes
openssl pkcs12 -export -out test.p12 -inkey test.key -in test.crt

# Now extract the components
openssl pkcs12 -in test.p12 -nocerts -out extracted.key -nodes
openssl pkcs12 -in test.p12 -clcerts -nokeys -out extracted.crt

For more control over the extraction process:

# Specify a different encryption algorithm for the output key
openssl pkcs12 -in certificate.p12 -nocerts -out key.pem -nodes -aes256

# Extract a specific certificate by friendly name
openssl pkcs12 -in certificate.p12 -clcerts -nokeys -out cert.pem -name "friendly_name"

# Convert the key to RSA format if needed
openssl rsa -in key.pem -out key.rsa

If you encounter problems:

  • "Unable to load private key" - Usually means wrong password
  • "No certificate matches" - The file might not contain certificates
  • "Expecting: ANY PRIVATE KEY" - The file might be corrupted

To verify your extracted files:

openssl rsa -in extracted.key -check
openssl x509 -in extracted.crt -text -noout

Remember that:

  • The extracted .key file contains sensitive private key material
  • Using -nodes means the key won't be encrypted in the output file
  • Always set proper file permissions (chmod 600 for key files)
  • Consider removing the -nodes flag for production use and protecting the key with a passphrase