PKI // Playing with OpenSSL



openssl req -x509 -days 365 -newkey rsa:2048 -nodes -keyout self.key -out self.crt

ECDSA with a 256-bit curve

openssl ecparam -name prime256v1
openssl req -x509 -days 365 -newkey ec:<(openssl ecparam -name prime256v1) -nodes -keyout prime256v1.key -out prime256v1.crt

ECDSA with a 384-bit curve

openssl ecparam -name secp384r1
openssl req -x509 -days 3650 -newkey ec:<(openssl ecparam -name secp384r1) -nodes -keyout secp384r1.key -out secp384r1.crt

answer at least country, email, and most importantly CN. You may enter an empty space for the rest.

as an alternative and instead of tweaking openssl.cnf you may also use a shortcut

#openssl req -x509 -newkey rsa:2048 -out selfsign.crt -keyout selfsign.key -nodes -sha256 -days 365
#-subj /CN=$domain
#-subj "/C=RU/L=Innopolis/O=Innopolis University/OU=SNE/CN=$domain/emailAddress=root@$domain"

review the newly created certificate

ls -lF *.crt *.key
openssl x509 -in self.crt -text -noout -fingerprint
openssl x509 -in self.crt -text -noout | less



in case you need a container

openssl pkcs12 -export -inkey self.key -in self.crt -out self.p12
openssl pkcs12 -export -inkey prime256v1.key -in prime256v1.crt -out prime256v1.p12
openssl pkcs12 -export -inkey secp384r1.key -in secp384r1.crt -out secp384r1.p12

Ubuntu’s Sake-oil

You already have a pair on Ubuntu

ls -lF /etc/ssl/certs/ssl-cert-snakeoil.pem /etc/ssl/private/ssl-cert-snakeoil.key

but in case you need to re-generate those

make-ssl-cert generate-default-snakeoil --force-overwrite

#openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
#   -keyout /etc/ssl/private/ssl-cert-snakeoil.key \
#   -out /etc/ssl/certs/ssl-cert-snakeoil.pem

NetBSD fix

On NetBSD you need to fix the config first

cp -i /usr/share/examples/openssl/openssl.cnf /etc/openssl/
cp -i /usr/share/examples/openssl/openssl.cnf /etc/openssl/openssl.cnf.dist
vi /etc/openssl/openssl.cnf

#default_md             = sha2

Concat an official certificate chain

Once you sent your CSR to your SSL provider, it will respond you with the PEM certificate, possibly as .crt. You will also need their root CA and intermediate certificates – if those aren’t delivered, you might find it on their website. Eventually concatenate those two

cd /etc/httpd/ssl/
cat intermediatecert rootcert > issuer-concat-cert.crt
chmod 400 issuer-concat-cert.crt

Comparing trust stores


Assessing SSL end-points

nmap -sV --script ssl-enum-ciphers -p 443
nmap -sV --script ssl-enum-ciphers -p 25 # finds starttls on its own

./ -h
./ --starttls smtp

Testing SSL/TLS certificates (SSLyze)

pip install --upgrade setuptools
pip install --upgrade sslyze

sslyze -h
sslyze --regular
sslyze --starttls=smtp


How To Create an SSL Certificate on Nginx for Ubuntu 14.04

OpenSSL tips and tricks

What is a Pem file and how does it differ from other OpenSSL Generated Key File Formats?

Command Line Utilities


A note about SSL/TLS trusted certificate stores, and platforms (OpenSSL and GnuTLS)

mk-ca-bundle the man page


How do I re-issue OpenSSL snakeoil cert?

How To Create a Self-Signed SSL Certificate for Nginx in Ubuntu 18.04

Creating a Self-Signed SSL Certificate on Ubuntu



How can I use OpenSSL with an external source of randomness?

Good entropy source for generating openssl keys

Random Numbers

How to speed up OpenSSL/GnuPG Entropy For Random Number Generation On Linux

Using engines for random number generation


Is it possible to generate RSA key without pass phrase?

Why openssl insist on requiring a passphrase on genrsa command?

Creating a .pem File for SSL Certificate Installations


Does .pem file contains both private and public keys?


req: Unrecognized flag sha2

How to make OpenSSL with SHA256 instead of sha1?

Generating an SHA256 SSL CSR on CentOS/RHEL using genkey