Les notions de sécurité, de signature et de confiance numériques sont des principes qui vivent avec l'industrie informatique depuis des dizaines d'années déjà sans toutefois trouver l'écho large qu'elles méritent. Il est probable toutefois que l'aspiration grandissante des particuliers à plus de confidentialité quant au contenu de leurs échanges peut amener à une demande accrue envers les fournisseurs de service de moyens techniques permettant de la préserver.
Notion de chaîne de confiance numérique
TODO ;)
Étape préalable de génération de la clé et de la requête de création de certificat
La toute première étape de notre périple va être la génération de la clé privée de votre serveur. Comme son nom l'indique, cette clé est *privée* et ne devra jamais, en aucune occasion, être communiquée à quelque tiers que ce soit.
Après s'être assuré que le paquet openssl est bien installée, ouvrons notre terminal préféré et tapouillons:
olemerdy@lafeuille:~$ cd /etc/ssl
olemerdy@lafeuille:/etc/ssl$ sudo openssl genrsa -out server.key 1024
L'algorithme ici choisi est RSA dont je me souviens avec émotion de la démonstration de fonctionnement en classe préparatoire, et la taille de clé est de 2048 bits, un format imposé par l'autorité de certification retenue.
Attention! Sitôt générée, sitôt protégée! Il est extrêmement important de limiter l'accès de cette clé au superutilisateur root seul en changeant ses droits d'accès à l'aide de la commande chmod, que nous utiliserons en mode octal pour changer:
olemerdy@lafeuille:/etc/ssl$ sudo chmod 400 server.key
Ouf, ça va mieux. Il est désormais temps de générer une requête de création de certificat. C'est cette requête que vous transmettrez par la suite à l'autorité de certification afin qu'elle l'utilise et génère le certificat final associé. Allons-y donc:
olemerdy@lafeuille:/etc/ssl$ sudo openssl req -new -key server.key -out server.csr
S'en suit un questionnaire vous permettant de renseigner un certain nombre d'informations qui figureront dans le certificat final. Dans notre cas particulier, cela n'a guère d'importance dans la mesure où l'autorité de certification choisie surcharge toutes ces valeurs. En fonction de votre propre choix, ces informations peuvent ou non servir. La plus critique est celle concernant le nom de domaine protégé qui doit absolument correspondre à celui pour lequel vous utiliserez le certificat. Exemples de réponse aux questions:
Country Name (2 letter code) [AU]:fr
State or Province Name (full name) [Some-State]:France
Locality Name (eg, city) []:Paris
Organization Name (eg, company) [Internet Widgits Pty Ltd]:LaFeuille.org
Organizational Unit Name (eg, section) []:LaFeuille.org
Common Name (eg, YOUR name) []:lafeuille.org
Email Address []:admin@lafeuille.org
Vous disposez de tous les éléments nécessaires, il est désormais temps de trouver un fournisseur externe.
Création du certificat avec StartSSL
L'autorité de certification que j'ai retenue est StartCom, une autorité qui a le bon goût de permettre la création de certificats de niveau 1 gratuits, tout en étant une autorité racine pour au moins Firefox et les systèmes Linux que j'ai pu tester, permettant ainsi une utilisation transparente du service pour l'utilisateur lambda. Il en existe quelques autres, comme CACert.org que je n'ai pas encore eu le loisir de tester.
Création du compte d'accès
La première étape consiste à obtenir un accès au site. En effet, StartCom a fait le choix (compréhensible étant donné son métier et que j'apprécie personnellement) de ne proposer qu'une authentification par certificat. Il convient donc de passer tout d'abord par le wizard de création:

Une fois votre certificat personnel obtenu, il ne vous reste plus qu'à cliquer sur Authenticate
et à sélectionner votre certificat.
Validation du domaine
Il convient à présent de valider le domaine pour lequel vous souhaitez créer un certificat.
Dans l'onglet Validation Wizard
, choisissez l'option Domain Name Validation

Entrons ensuite le nom de votre domaine à valider, le top-domain level étant à sélectionner dans une loooooooongue select box (le clavier sera notre meilleur ami).

Sur l'écran suivant, nous voyons une liste d'adresses mail apparaître dont certaines, magie, sont les nôtres, ou plus exactement celles qui sont obtenues en faisant un whois sur le nom de domaine. Sélectionnons celle où nous souhaitez recevoir notre courriel de validation.

Quelques secondes plus tard, nous recevons le courriel en question avec le code de confirmation à rentrer dans le champ de la page idoine.

Ça y est, notre domaine est validé pour une durée de 30 jours. Enchaînons immédiatement avec la création du certificat à proprement parler.
Création du certificat
Dans l'onglet Certificates Wizard
, sélectionnons Web Server SSL/TLS Certificate
:

L'étape suivante n'est pas nécessaire dans la mesure où nous avons déjà généré clé privée et demande de certificat. Cliquons donc sur Skip
:

Dans le champ suivant, il convient simplement de copier/coller le contenu de notre fichier /etc/ssl/server.csr:

Et voilà! Le certificat est généré. Copions le contenu affiché dans la zone de texte et collons-le dans le fichier justement intitulé /etc/ssl/server.crt
Notez que peu après la délivrance de ce certificat, StartCom viendra naviguer sur votre site pour s'assurer que le certificat a été correctement installé. Vous recevrez un mail indiquant que tout est correctement en place. C'est le second niveau de contrôle réalisé par StartCom. Mais pour que cela fonctionne, il faut déjà s'assurer d'avoir installer correctement ledit certificat.
Installation du certificat
Dernière étape, l'installation des certificats serveur StartSSL qui viendront en complément de votre propre certificat serveur afin de valider l'ensemble de la chaîne de certification. Vous pouvez le récupérer à l'adresse suivante ou simplement en le téléchargeant depuis votre terminal:
olemerdy@lafeuille:/etc/ssl$ sudo wget http://www.startssl.com/certs/sub.class1.server.ca.crt
Configuration d'Apache
Nous y sommes presque. Il reste à configurer Apache pour qu'il utilise ces certificats nouvellement créés. Il convient d'éditer le fichier du site que vous souhaitez configurer dans /etc/apache2/sites-available:
olemerdy@lafeuille:/etc/apache2/sites-available$ sudo nano 001-lafeuille.org
Et de s'insérer dans le VirtualHost consacré à la connexion sur le port 443 (port par défaut HTTPS):
<VirtualHost *:443>
SSLEngine On
SSLCertificateFile /etc/ssl/server.crt
SSLCertificateKeyFile /etc/ssl/server.key
SSLCACertificatePath /etc/ssl/certs
SSLCertificateChainFile /etc/ssl/sub.class1.server.ca.crt
</VirtualHost>
On redémarre le serveur Apache pour s'assurer que tout va bien:
olemerdy@lafeuille:/etc/apache2/$ sudo /etc/init.d/apache2 restart
Et il ne reste plus qu'à se connecter sur la page d'accueil en HTTPS et à constater que tout se passe bien: https://lafeuille.org
Sources