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
- 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.
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.
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.