Gérer les certificats d'authentification SSL du CRANS
Afin de s'assurer la sécurité d'une communication sécurités, l'un ou l'autre des participants doivent pouvoir communiquer avec l'autre de façon sécurisée (cryptée).BR Le principe d'une connexion SSL repose sur la communication avec un système de paires de clés publique/privé FootNote(Voir aussi WikiInformatique/ClésPgp).BR
Dans le cadre du crans, il nous faut définir un grand nombre de certificats de sécurités (https://www.crans.org, https://wiki.crans.org, ...). Afin d'éviter à l'utilisateur lambda de devoir trop souvent accepter les certificats présentés par les différents services, on définit un Certificat d'Autorité (CA) qui, une fois connu du navigateur, acceptera automatiquement les certificats SSL présentés signés par la clé privée associée à ce Certificat d'Autorité.
Le Certificat d'Autorité
Génération de la paire de clés
La paire de clés associées à ce certificat particulier est utilisé pour certifier tous les autres certificats que les services du crans sont amenés à générer.BR Pour commencer, on génère une paire de clés publique/privé qui sera attribuée au Certificat d'Autorité:
{{{openssl req -config /etc/ssl/openssl.cnf -new -x509 -keyout /etc/ssl/certificats/private/cakey.pem -out /etc/ssl/certificats/cacert.pem -days 1095 -nodes }}}
Dans ce cas, on crée deux fichiers nommés cakey.pem (qui contient la clé privée) et cacert.pem (qui contient la clé publique) qui seront valables pour une durée de 1095 jours (~3 ans).BR L'option -nodes désactive la saisie d'une passphrase pour l'utilisation du certificat.
Génération du certificat à diffuser
Afin d'être reconnu par les navigateurs, il faut leur faire connaître notre clé publique associée au Certificat d'Autorité à travers un certificat à télécharger.
On génère le certificat adéquat de la manière suivante : {{{openssl x509 -in /etc/ssl/certificats/cacert.pem -out /var/www/crans-certificat.crt }}} Où /var/www/crans-certificat.crt est le certificat à intégrer dans les navigateurs pour reconnaître l'Autorité CRANS en manière de signature de certificats SSL.
Certificats de sécurité SSL
Pour un serveur web sécurisé
On procède de la même manière, en commençant par créer une paire de clés (/!\ rassemblées dans le même fichier) associée à un service (exemple de egon) : {{{openssl req -config /etc/ssl/openssl.cnf -new -keyout /etc/ssl/certificats/egon.pem -out /etc/ssl/certificats/egon.pem -days 365 -nodes }}} Au moment de définir le Common Name associé à cette paire de clés, il faut penser à spécifier la bonne valeur. À savoir le nom du serveur web, dans notre cas : egon.crans.org. (le fichier openssl.cnf contient une valeur par défaut www.crans.org qui est utilisée pour définir le Certificat d'Autorité )
Afin que ce certificat soit reconnu est accepté par le Certificat d'Autorité précédemment créé, on signe cette paire de clés avec la clé privée associée au Certificat d'Autorité : {{{openssl ca -config /etc/ssl/openssl.cnf -policy policy_anything -out /etc/ssl/certificats/egon_cert.pem -infiles /etc/ssl/certificats/egon.pem }}}
Puis on crée le certificat associé : {{{openssl x509 -in /etc/ssl/certificats/egon_cert.pem -out /etc/ssl/certificats/egon_cert.crt }}}
Reste à modifier le httpd.conf de apache-ssl de la manière suivante : {{{<VirtualHost 138.231.136.7:443>
- Port 443 SSLEnable
DocumentRoot /var/www ServerName egon.crans.org SSLCertificateFile /etc/ssl/certificats/egon_cert.crt SSLCertificateKeyFile /etc/ssl/certificats/egon.pem SSLCacheServerPath /usr/lib/apache-ssl/gcache SSLCacheServerPort /var/run/gcache_port SSLSessionCacheTimeout 60 SSLVerifyClient 0 SSLVerifyDepth 10 SSLFakeBasicAuth
</VirtualHost>}}}
Pour le wifi
À lire pour commencer : http://www.tldp.org/HOWTO/SSL-Certificates-HOWTO/x341.html
À voir
- Comment on fait connaître le CA autrement que par une page web indiquant de le télécharger ?
- Utilisation pour IMAP ??