Bloc-Notes : en octobre, régénère tes certificats

Comme chaque année mes certificats arrivent à expiration, ne faisant cette procédure qu’une fois par an elle passe rapidement aux oubliettes. Voici un petit bloc-notes pour les prochaines années. Tous mes certificats SSL sont signés par Startssl que l’on ne présente plus.

Régénération des certificats

  1. Je supprime tous les certificats arrivant à expiration chez Startssl. Ensuite pour chaque sous-domaines je génère un fichier key et un fichier csr nécessaire pour la création du certificat chez Startssl.

Génération du fichier key

mkdir ~/certificats/exemple.olivierdelort.net/
cd ~/certificats/exemple.olivierdelort.net/
openssl genrsa -des3 -out exemple.olivierdelort.net_avec_passphrase.key 4096

Le mot de passe (passphrase) est obligatoire sans quoi StartSSL va  refuser le fichier key et il doit contenir uniquement des chiffres et des lettres.

Génération du fichier csr en répondant aux question comme suit

cd ~/certificats/exemple.olivierdelort.net
openssl req -new -key exemple.olivierdelort.net_avec_passphrase.key -out exemple.olivierdelort.net.csr
    Country Name : FR
    State or Province Name : L.............
    Locality Name : P.......
    Organization Name : Colmaris Ltd
    Organizational Unit Name : Colmaris Ltd
    Common Name : olivierdelort.net
    Email Address :

Maintenant chaque sous-domaines possèdent un fichier key et un fichier csr, passons maintenant à création du certificat. A noter que le fichier key ne sera plus à générer l’année prochaine, je m’en servirai de nouveau pour générer mon fichier csr.

2. Chez Startssl je vais dans l’onglet : Certificates wizard -> Certificate Target : web server SSL/TLS certificate . Sur la page generate private key je clique sur skip car je la possède déjà, enfin je colle le contenu de mon fichier csr.

startssl1

Je continue en sélectionnant mon domaine (olivierdelort.net) puis le sous domaine (exemple.olivierdelort.net) pour lequel je souhaite créer le certificat. En effet Startssl ne fournit gratuitement qu’un certificat de class 1 par sous-domaine, ce qui m’oblige à répéter cette manipulation pour chaque  sous-domaine que je souhaite chiffrer.

A la fin de l’assistant de génération celui-ci m’affiche mon certificat.

startssl2

3. Je copie-colle ensuite le contenu dans mon fichier exemple.olivierdelort.net.crt

4. Je désactive la passphrase sur mon fichier exemple.olivierdelort.net_avec_passphrase.key utile uniquement pour startssl et la génération du certificat.

openssl rsa -in exemple.olivierdelort.net_avec_passphrase.key -out exemple.olivierdelort.net.key

5. Je récupère les fichiers depuis la tool box de StartSSL nécessaire pour l’authenticité du certificat.

  • StartCom Root CA (PEM encoded) => ca.pem
  • Class 1 Intermediate Server CA => sub.class1.server.ca.pem

A ce stade de l’opération je me retrouve avec un certificat pour chaque sous-domaine à chiffrer accompagnés de leur clef respective. Il est maintenant temps de les déployer sur mes serveurs.

Serveur nginx (serveur web et reverse proxy)

Pour utiliser mon certificat avec nginx je l’unifie avec ca.pem et sub.class1.server.ca.pem.

mkdir /etc/nginx/ssl
#j'importe les fichiers via ssh
cd /etc/ngnix/ssl
#J'unifie le certificat
cat exemple.olivierdelort.net.crt sub.class1.server.ca.pem ca.pem > exemple.olivierdelort.net-unified.crt

Je vérifie le fichier exemple.olivierdelort.net afin de ne pas mettre en erreur nginx, en vérifiant qu’il y ai pas de ligne ressemblant à ceci :

-----END CERTIFICATE----------BEGIN CERTIFICATE-----

Si tel est le cas, ajouter un retour ligne pour obtenir ceci :

-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----

Pour finir je sécurise le tout :

chmod 600 exemple.olivierdelort.net-unified.crt exemple.olivierdelort.key

Il ne reste plus qu’à configurer le fichier vhost de mon site internet exemple.olivierdelort.net

server {
  listen 0.0.0.0:443 ssl;
  server_name exemple.olivierdelort.net
  server_tokens off
  root /var/www/html;

  # SSL
  # ============================================================================
  ssl                   on;
  ssl_certificate       /etc/nginx/ssl/exemple.olivierdelort.net-unified.crt;
  ssl_certificate_key   /etc/nginx/ssl/exemple.olivierdelort.net.key;
  ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;
  ssl_session_cache shared:SSL:10m;
  ssl_session_timeout 5m;
}

et pour mon reverse proxy

server {
        listen 443;
        server_name exemple.olivierdelort.net;
        ssl on;
        ssl_certificate /etc/nginx/ssl/exemple.olivierdelort.net-unified.crt;
        ssl_certificate_key /etc/nginx/ssl/exemple.olivierdelort.net.key;
        location / {
                proxy_pass https://192.168.xx.xx;
        }
}

Serveur courriel Dovecot

Le principe est le même, unifier les différents certificats dans un seul et ensuite renseigner la configuration de dovecot

cd ~/certificats/dovecot/
cat exemple.olivierdelort.net.crt sub.class1.server.ca.pem > exemple.olivierdelort.net-unified.crt

j’importe en ssh les fichiers : ca.pem, exemple.olivierdelort.net-unified.crt, exemple.olivierdelort.net.key dans /etc/ssl/private et je sécurise le tout.

chmod 600 exemple.olivierdelort.net-unified.crt exemple.olivierdelort.key ca.pem

J’édite ensuite le fichier de configuration /etc/dovecot/dovecot.conf

# SSL support.
ssl = required
verbose_ssl = no
ssl_key_file = /etc/ssl/private/exemple.olivierdelort.net.key
ssl_cert_file = /etc/ssl/private/exemple.olivierdelort.net-unified.crt
ssl_ca_file = /etc/ssl/private/ca.pem

Serveur courriel Postfix

C’est exactement la même méthode que pour Dovecot, donc nous récupérons les fichiers :

nano /etc/postfix/main.cf
smtpd_tls_cert_file = /etc/ssl/private/exemple.olivierdelort.net-unified.crt
smtpd_tls_key_file = /etc/ssl/private/exemple.olivierdelort.net.key
smtpd_tls_CAfile = /etc/ssl/private/ca.pem
smtpd_use_tls=yes

Serveur Apache

Même principie que pour nginx :

mkdir /etc/apache2/ssl
#j'importe les fichiers via ssh
cd /etc/apache2/ssl
#J'unifie le certificat
cat exemple.olivierdelort.net.crt sub.class1.server.ca.pem ca.pem > exemple.olivierdelort.net-unified.crt
# je sécurise le tout
chmod 600 exemple.olivierdelort.net-unified.crt exemple.olivierdelort.key

Modification des vhosts apache :

<VirtualHost *:443>
        #ServerName mondomaine.tld
        ServerAlias exemple.olivierdelort.net

        DocumentRoot "/var/www/monsite"
        <Directory "/var/www/monsite">
                Options -IndexeFollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                Allow from all
        </Directory>
        SSLEngine on
        SSLVerifyClient none
        SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-res$
        SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
        SSLCertificateFile /etc/apache2/ssl/exemple.olivierdelort.net-unified.crt
        SSLCertificateKeyFile /etc/apache2/ssl/exemple.olivierdelort.net.key
        SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-res$
    ServerSignature Off
</virtualHost>

Pour finir

Il ne faut absolument pas garder sur sa machine ses précieuses données, sinon pourquoi s’embêter à tout chiffrer. Tous les certificats sont regroupés dans dans le répertoire ~/certificats. Je compresse le répertoire, je le copie sur mon disque dur externe de sauvegarde et je supprime le répertoire. Me voilà opérationnel jusqu’à l’année prochaine.

Vus : 1123
Publié par Olivier Delort : 73