Création d'un certificat autosigné

D'après http://www.linux-france.org/prj/edu/archinet/systeme/x4005.html

On distingue le nom du host, qui va servir pour sa propre autorité de certification, et le servername, qui sera le nom de domaine qui va utiliser le certificat (directive ServerName d'apache, ou host utiliser pour les mails en TLS, etc.)

host=myhost.example.com
servername=myserver.example.com

On crée sa propre autorité de certification

# génération de la clé privée pour l'autorité de certification (soi-même en l'occurence) (avec passphrase)
openssl genrsa -des3 1024 > /etc/ssl/private/myca.$host.key
 
# génération du certificat de l'autorité de certification (pour 10 ans histoire de pas recommencer tous les jours)
# On répondra $host à la question "Common Name"
openssl req -new -x509 -days 3650 -key /etc/ssl/private/myca.$host.key > /etc/ssl/certs/myca.$host.crt

On a maintenant clé et certif de son autorité de certification, on passe aux certificats qui seront utilisés par apache, postfix, dovecot & co (pour créer plusieurs certifs, ne reprendre que la partie qui suit en changeant $servername)

# génération de la clé privée
openssl genrsa 1024 > /etc/ssl/private/$host.key
 
# création du fichier de demande de signature de certificat (CSR Certificate Signing Request)
# On répondra $servername à la question "Common Name (eg, YOUR name)"
# Ce sera le CN (Common Name) du certificat
openssl req -new -key /etc/ssl/private/$host.key > /etc/ssl/certs/$servername.csr
 
# reste à signer son certificat (valide 1 an)
openssl x509 -days 365 -req -in /etc/ssl/certs/$servername.csr -out /etc/ssl/certs/$servername.crt -CA /etc/ssl/certs/myca.$host.crt -CAkey /etc/ssl/private/myca.$host.key -CAcreateserial -CAserial ca.srl

Ensuite, il reste à préciser dans le ssl.conf d'apache les lignes

SSLCertificateFile /etc/ssl/certs/myserver.example.com.crt
SSLCertificateKeyFile /etc/ssl/private/myserver.example.com.key

Si on a besoin d'un fichier pem, qui combine clé et certif (pour courier-ssl par exemple)

# on mixe clé et certif
cat /etc/ssl/private/$host.key /etc/ssl/certs/$servername.crt > /etc/ssl/certs/$servername.pem
# et on ajoute 
openssl gendh >> /etc/ssl/certs/$servername.pem