30 Avr

Nginx avec Certificat SSL Autosigné

La nature humaine étant ce qu’elle est, particulièrement sur internet, il est de plus en plus indispensable de pouvoir chiffrer ses communications et authentifier le serveur avec lequel on échange. Le protocole SSL répond à ce besoin mais il nécessite de disposer au préalables de certificats.

Il faut savoir qu’il existe deux type de certificats SSL. Ceux qui sont signés par une autorité de certification (CA) comme Verisigns ou Thawte, minimum 50€ par an ou plus, et ceux auto-signés et gratuits. Le signataire étant censé être un tiers de confiance garantissant la validité du certificat, on comprend que cela peut poser problème dans le cas des certificats auto-signés. Ceci dit, pour un usage personnel, vous pourrez raisonnablement supposer, sauf à être schizophrène, que vous pouvez faire confiance à vous même et au certificat que vous avez auto-signés.

Je propose donc, dans ce post, un script qui permet de générer rapidement une clé privée RSA de 2048 bits et un certificat auto-signé. Je donne aussi quelques explications qui, une fois le certificat créé, permettront de le mettre en place sur votre serveur web préféré (nginx).

2048 bits sinon rien

J’utilise une clé de 2048 bits, ce qui est, à l’heure actuelle, le minimum recommandé pour un certificat SSL. Bien sûr, on peut toujours utiliser des clés plus grandes (4096 bits etc.), mais il s’agit de calcul matriciel et la charge cpu peut facilement être multipliée par 8-12 quand la taille de la clé double ce qui posera problème pour des serveurs à fort trafic.

Environnement

OS : Debian 7.5 stable (Wheezy) (64bits)
Nginx : nginx/1.2.1

Le Script

Comme d’habitude, copiez/collez le script à l’aide de nano dans un fichier (type nom_du_script.sh) sur votre serveur et passez un « chmod a+x » pour le rendre exécutable. A partir de là, tapez à la ligne de commande « nom_du_script.sh certificate 730 » pour créer un certificat valide 730 jours soit 2 ans.

Configuration Nginx avec SSL

Une fois armé de votre clé privée et certificat, copiez les là où il faut dans l’arborescence de votre serveur. Il ne reste plus qu’à configurer Nginx. Je me suis inspiré pour cette configuration des recommandations de Nginx et de celles de Mozilla. Il faudra par contre rajouter à la suite le reste de la configuration de votre serveur web.

A remarquer que, dans un usage personnel, la configuration de Mozilla est un peu excessive. Il s’agit de permettre l’accès au maximum de clients quitte à utiliser des ciphers ou des protocoles moins sécurisés. Par exemple, si vous n’avez pas de soucis de compatibilité, déactivez le SSLv3 et TLSv1. Typiquement, le SSLv3 est conservé pour les clients internet explorer 6. Aussi, par soucis de simplicité, j’ai désactivé le paramètre « Diffie-Hellman » mais il fourni réellement un gain de sécurité. Pour plus d’information, aller lire cette page sur le « hardening » de configuration SSL.

Il ne vous reste plus maintenant qu’à taper https://www.mondomaine.com/ dans votre navigateur préféré. L’avertissement de sécurité est normal, les navigateurs sont configurés pour ne reconnaître sans problème que les certificats signés par des CA reconnus (Verisigns, Thawte, etc.)

Un Dernier Mot

Une clé privé n’a d’intérêt que si elle reste privée. Il est donc important de la générer sur le serveur même et qu’elle ne soit accessible que par le root (chown root. et chmod 600). Bien évidemment, mettez à jour le serveur avant de procéder et régénérez régulièrement de nouveaux couples de clés/certificats. Un certificat « fort » aujourd’hui sera probablement trop « faible » d’ici 2 ou 3 ans, souvenez-vous de Heartbleed.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.