Générer un certificat auto-signé robuste : RSA et DH 4096 bits et SHA-2 512 bits

Si vous hébergez sur votre serveur web des services personnels type ownCloud, lecteur RSS, webmail, panel d’administration, etc, il peut être une bonne idée d’y accéder de manière chiffrée, c’est à dire en HTTPS. Je dirais même que cela est indispensable lorsque des données personnelles transitent.

Malheureusement, les certificats SSL/TLS sont payants (d’une dizaine d’euros à plusieurs centaines), enfin pour le moment, puisque Let’s Encrypt arrive bientôt. 😉

Heureusement, on peut générer un certificat et le signer nous-même au lieu de le faire signer par une autorité de certification reconnue. Cela entraînera une alerte de sécurité dans les navigateurs, cette méthode n’est donc à utiliser que sur un site ou service accessible que de vous (ou petit groupe de personne).

Nous allons donc générer un certificat depuis une machine GNU/Linux, ce couple certificat/clé visant à être utilisé avec Nginx, Apache ou autre serveur web.

Génération de la clé

openssl genrsa -out key.pem 4096

La clé s’appellera key.pem, et sera généré sur 4096 bits avec RSA, un algorithme de chiffrement asymétrique.

Génération du certificat

openssl req -new -x509 -sha512 -days 3650 -key key.pem -out cert.pem

On crée le certificat cert.pem, auto-signé (-x509), hashé sur 512 bits avec SHA-2, et valable 10 ans.

Si vous souhaitez utiliser ce certificat pour des sous-domaine il faut rentrer quelque chose du type *.angrisan.fr dans le champ Common Name.

Génération du paramètre Diffie-Hellman

Pour améliorer la sécurité de l’échange chiffré, vous pouvez dire au serveur web d’utiliser un autre dhparam, comme par exemple celui que nous allons générer. Ce paramètre n’a pas de rapport direct avec le certificat, mais il est important dans le paramétrage de votre serveur web.

openssl dhparam 4096 -out dh4096.pem

Cette commande génère un paramètre DH de 4096 bits, contre 1024 de base.

N’oubliez pas de réduire au maximum les permissions de ces fichiers, avec un chmod 600 par exemple.

Voilà, nous avons généré les 3 fichiers pour notre implémentation de HTTPS.

Dans un prochain article, je parlerais des bons paramètres à avoir sur Nginx afin d’assurer une sécurité maximale.

Dernière modification le 27 octobre 2016.

Angristan

Stanislas - 17 ans - Lycéen passionné d'informatique, de technologie et de high-tech. Sysadmin junior, adepte des logiciels libres, de GNU/Linux et d'Android. Music addict.

Poster un Commentaire

9 Commentaires sur "Générer un certificat auto-signé robuste : RSA et DH 4096 bits et SHA-2 512 bits"

avatar
F!nTcH
Visiteur
F!nTcH

Il y a une toute petite coquille dans la commande : il manque une espace entre « -sha512 » et « -days 3650 » 🙂

Yax
Visiteur

Une procédure clairement documentée. J’attends avec impatience l’article sur la sécurisation de NginX je crois que je peux améliorer mon paramétrage sur ce plan là.

bunam
Visiteur
bunam

Sinon il y a http://www.startssl.com qui est déjà gratos et reconnu

Laurent
Visiteur

Ouaip, mais Let’s Encrypt supporte le SNI: le cn contient le nom du service, mais on peut aussi ajouter des alias. Pratique quand on héberge plusieurs sites derrière un reverse-proxy !
J’ai quelques recettes de cuisine sur le sujet sur mon blog, dont un script pour le renouvellement automatique de certificats let’s Encrypt (pour un reverse-proxy Nginx).

wpDiscuz