8 févr. 2017

Créer un certificat SSL self-signed pour un serveur et le valider dans Chrome

Créer un certificat SSL


Pour créer un certificat SSL self-signed, il est possible d'utiliser OpenSSL. Les exe, selon les plateformes, sont disponibles ici.

OpenSSL fournit un outil .exe en ligne de commande permettant de générer une clé privée ainsi que le certificat associé. Tel que décrit sur ce site, voici la procédure pour générer la clé et le certificat:

openssl.exe genrsa -out key.pem 2048
openssl.exe req -new -sha256 -key key.pem -out csr.csr
openssl.exe req -x509 -sha256 -days 365 -key key.pem -in csr.csr -out certificate.pem

Lors du lancement des 2 dernières commandes, une série de questions seront posées. Il est important de fournir le Common name / FQDN (Full Qualified Domain Name), avec l'adresse IP / domain du serveur auquel le certificat sera associé.

Normalement, trois fichiers vont être créés :
  • key.pem
  • csr.csr
  • certificate.pem
Pour un serveur WS sous NodeJS, il sera nécessaire de fournir la key.pem et le certificate.pem afin de créer une connexion sécurisée (WSS / HTTPS).


var tls = require('tls');
var fs = require('fs');

var options = {
   key  : fs.readFileSync('private.key'),
   cert : fs.readFileSync('public.cert')
};

var server = tls.createServer(options, function (res) {
   res.write('Hello World!');
   res.pipe(res);
}).listen(8000);

Le serveur est ensuite accessible avec l'option SSL sur le protocole utilisé :

  • WSS://adresseduserveur, pour du WebSocket
  • HTTP://adresseduserveur, pour de l'HTTP

Ajouter le certificat en tant Trusted Root CA dans Chrome


Pour ce faire, il suffit de suivre les instructions ci-dessous, détaillées sur ce post StackOverflow, qui consiste à se rendre sur l'adresse du serveur, exporter le certificat SSL pour le réimporter en tant que Trusted Root CA dans Chrome :



Une fois le certificat importé dans Chrome, redémarrer le navigateur puis accéder au serveur voulu, via WSS ou HTTPS.