Uniquement https ?
Si vous cherchez uniquement à passer un site web de http à https, merci de consulter la page CentralisationHttps
On va expliquer ici comment obtenir un certificat valide pour la plupart des logiciels pour autre chose que du https (imap, smtp, xmpp…), ou si vous ne pouvez pas faire pointer le nom à faire passer en https vers proxy.crans.org (par exemple pour gitlab.crans.org auquel on accède à la fois en https et en ssh).
L'autorité de certification (AC) reconnue actuellement utilisée par le Crans pour ses services publiques est Let's Encrypt. Pour ses services internes (essentiellement, tout ce qui est sur le vlan adm), le Crans utilise toujours CaCert.
Obtention d'un certificat
- Pour obtenir un certificat pour une machine, il faut comme pré-requis que cette machine soit accessible depuis internet sur le port 80. Il faut donc ouvrir le port entrant sur le pare-feu. Pour cela :
Se connecter en ssh sur thot.crans.org et lancer crans.
Choisir Modifier une machine existante, trouver la machine avec une adresse ip publique (pour être accessible depuis internet il faut une ip publique).
Aller dans le menu Information et mettre le port 80 dans Port TCP ouvert vers l'extérieur.
Attendre un run de generate.py sur odlyd.crans.org ou bien :
Se connecter en ssh sur odlyd.crans.org
Lancer sudo /usr/scripts/gestion/gen_confs/generate.py
Ensuite, ajouter le groupe letsencrypt à la machine dans bcfg2.
Se connecter en ssh sur bcfg2.adm.crans.org
Aller dans /bcfg2/Metadata et éditer le fichier groups.xml
Chercher la définition du groupe de la machine et y ajouter le groupe letsencrypt, par exemple pour geet.crans.org:
<Group name="geet" profile="true"> […] <Group name="letsencrypt"/> </Group>
- Se connecter en ssh sur la machine et y effectuer les opérations suivantes :
Lancer un run de bcfg2 (sudo bcfg2 -I -q) qui va ajouter les dépôts backports où se trouve le binaire certbot qui est le client letsencrypt.
Mettre à jour la liste des paquets : sudo apt-get update
Relancer un run de bcfg2 (sudo bcfg2 -I -q), il devrait alors normalement installer le paquet certbot. Le paquet n'est pas disponible sous wheezy pour les machines pas encore à jour. Il convient donc alors d'utiliser le script /usr/scripts/src/letsencrypt/certbot-auto en lieu et place de la commande cerbot dans ce qui suit.
Normalement, bcfg2 devrait avoir créé un fichier de configuration pour générer le certificat letsencrypt dans /etc/letsencrypt/conf.d/localhost.ini. Regardez le fichier pour voir s'il correspond bien au certificat que vous souhaitez générer (notamment le paramètre domains). Vous pouvez aussi vérifier le paramètre authenticator. Il devrait valoir webroot si nginx est installé sur la machine et standalone sinon.
Si nginx est installé sur la machine, vous devez ajouter include "snippets/letsencrypt-webroot.conf"; à tous les sites activés dans /etc/nginx/sites-enabled.
Lancer sudo certbot --config /etc/letsencrypt/conf.d/localhost.ini certonly pour générer la clef privée et le certificat. Ils seront alors mis dans le dossier /etc/letsencrypt/live/_nom_de_la_machine/.
- Ce certificat est valide 90 jours. Il conviendra de le renouveler tous les 60 jours (lorsqu'il restera strictement moins de 30 jours de validité)
Renouvellement d'un certificat
Manuellement
Appliquer exactement la même procédure que pour obtenir un certificat. Normalement les deux premiers points (ouvrir le port 80 et mettre letsencrypt dans bcfg2) sont déjà fait. C'est là également la marche à suivre si on veut ajouter un nom ou retirer un nom au certificat.
Automatiquement
Sur les machines du groupe letsencrypt (autre que le proxy https) un cron (/etc/cron.d/letsencrypt) est automatiquement installé qui exécute certbot renew -q tous les jours. Le comportement est le suivant : si un certificat expire dans moins de 30 jours, alors on le renouvelle avec les mêmes paramètres que la dernière fois qu'il a été généré manuellement.
Les renouvellements ne sont pas comptés dans le ratelimit qui limite le nombre de certificats par second level domain, mais ont une limite différente : pour chaque certificat qui a déjà été émis, on peut générer jusqu'à 5 certificats par semaine avec le même ensemble de noms dans les subject alt names.
Un autre cron, /etc/cron.d/letsencrypt_check_cert vérifie que le dernier certificat généré est bien celui utilisé par l'application, et sinon, redémarre/recharge l'application pour qu'elle utilise le dernier certificat.