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