Creating Certificate Signing Requests
About Certificate Signing Requests
Obtaining an SSL certificate from a certificate authority (CA) requires to create a certificate signing request (CSR). Provide information u might be prompted, especially the common name (CN) has to be correct and should be the fully qualified domain name (FQDN).
Create a Private Key and a CSR
Use this method if you want to use HTTPS (HTTP over TLS). Create a new folder, dir into it and build a 2048-bit private key (domain.key) and a CSR (domain.csr):
openssl req \
-newkey rsa:2048 \
-nodes \
-keyout domain.key \
-out domain.csr
Create a CSR from an existing Private key
Use this method if you already have a private key.
openssl x509 \
-in domain.crt \
-signkey domain.key \
-x509toreq \
-out domain.csr
Building SSL Certificates
Create a Self-Signed Certificate
This is for use without a CA.
openssl req \
-newkey rsa:2048 \
-nodes \
-keyout domain.key \
-x509 \
-days 365 \
-out domain.crt
Create a Self-Signed Certificate from an existing Private Key
Use this method if you already have a private key.
openssl req \
-key domain.key \
-new \
-x509 \
-days 365 \
-out domain.crt
Create a Self-Signed Certificate from an Existing Private Key and CSR
This is for use without a CA.
openssl x509 \
-signkey domain.key \
-in domain.csr \
-req \
-days 365 \
-out domain.crt
Inspect Certificates
Use the following 2 Commands for human readable content of PEM-encoded files:
Show Signing Request
openssl req \
-text \
-noout \
-verify \
-in domain.csr
Show Certificate
openssl x509 \
-text \
-noout \
-in domain.crt
Verify a Certificate was Signed by a CA
openssl verify \
-verbose \
-CAFile ca.crt domain.crt
Private Keys
Building and verifying private keys.
Create a Private Key
Generate 2048-bit private key:
openssl genrsa \
-des3 \
-out domain.key 2048
Verify a Private Key
Check private key validity.
openssl rsa \
-check \
-in domain.key
Verify a Private Key Matches a Certificate and CSR
Always double check.
openssl rsa \
-noout \
-modulus \
-in domain.key \
| openssl md5 openssl x509 \
-noout \
-modulus \
-in domain.crt \
| openssl md5 openssl req \
-noout \
-modulus \
-in domain.csr \
| openssl md5
Encrypt a Private Key
Set a password for encrypting the private key:
openssl rsa \
-des3 \
-in unencrypted.key \
-out encrypted.key
Decrypt a Private Key
Provide credentials for the encrypted key when prompted.
openssl rsa \
-in encrypted.key \
-out decrypted.key
Convert Certificate Formats
A lot of different types of certificate are out there. Some possible conversions are described below.
Convert PEM to DER
openssl x509 \
-in domain.crt \
-outform der \
-out domain.der
Convert DER to PEM
openssl x509 \
-inform der \
-in domain.der \
-out domain.crt
Convert PEM to PKCS7
openssl crl2pkcs7 -nocrl \
-certfile domain.crt \
-certfile ca-chain.crt \
-out domain.p7b
Convert PEM to PKCS12
openssl pkcs12 \
-inkey domain.key \
-in domain.crt \
-export \
-out domain.pfx
Convert PKCS7 to PEM
openssl pkcs7 \
-in domain.p7b \
-print_certs \
-out domain.crt
Convert PKCS12 to PEM
openssl pkcs12 \
-in domain.pfx \
-nodes \
-out domain.combined.crt