Certificat SSL
Certificat SSL
Vous pouvez générer un certificat gratuit avec Let's Encrypt, ou installer votre propre certificat. Cette page concerne une installation auto-hébergée : sur Dokos Cloud, les certificats sont gérés pour vous.
Prérequis
- Le bench est en mode DNS multi-tenant (
bench config dns_multitenant on). Sinon, la commande s'arrête avec le messageYou cannot setup SSL without DNS Multitenancy. Voir Domaines et multi-tenant. - Le nom de domaine pointe vers le serveur (entrée DNS de type A).
- Les ports 80 et 443 du serveur sont ouverts.
- Vous pouvez lancer des commandes en tant que
root(sudo). - Certbot est installé. Suivez les instructions de Certbot pour votre système.
Générer un certificat pour un site
sudo -H bench setup lets-encrypt <site>
La commande demande une confirmation : elle arrête Nginx quelques instants, et vos sites sont alors inaccessibles. Ensuite, elle :
- écrit la configuration de Certbot dans
/etc/letsencrypt/configs/<site>.cfg; - demande le certificat à Let's Encrypt ;
- ajoute le certificat à la configuration du site et régénère la configuration Nginx ;
- ajoute une tâche planifiée de renouvellement dans la crontab de
root.
Exemple fictif : sudo -H bench setup lets-encrypt compta.example.com. Le site répond ensuite sur https://compta.example.com.
Générer un certificat pour un domaine personnalisé
Le domaine doit d'abord être ajouté au site avec bench setup add-domain (voir Domaines et multi-tenant). Sinon, la commande répond No custom domain named … set for site.
sudo -H bench setup lets-encrypt <site> --custom-domain <domaine>
Générer un certificat générique (wildcard)
Pour couvrir tous les sous-domaines d'un domaine (*.example.com) :
sudo -H bench setup wildcard-ssl example.com --email admin@example.com
Let's Encrypt vérifie alors le domaine par une entrée DNS de type TXT, que vous ajoutez à la main chez votre registraire. --exclude-base-domain exclut example.com lui-même du certificat.
Renouveler un certificat
Un certificat Let's Encrypt est valable 90 jours. Certbot le renouvelle quand il reste moins de 30 jours.
La tâche planifiée ajoutée par bench setup lets-encrypt lance chaque jour à minuit :
certbot renew -a nginx --post-hook "systemctl reload nginx"
Si le renouvellement automatique échoue, renouvelez à la main :
sudo bench renew-lets-encrypt
Cette commande réinstalle la tâche planifiée, arrête Nginx, lance certbot renew, puis redémarre Nginx.
sudo certbot certificates.Installer votre propre certificat
Si vous avez déjà un certificat et sa clé privée :
bench set-ssl-certificate <site> /chemin/absolu/vers/certificat.crt
bench set-ssl-key <site> /chemin/absolu/vers/cle.key
bench setup nginx
sudo systemctl reload nginx
Pour un domaine personnalisé, passez les chemins à bench setup add-domain avec --ssl-certificate et --ssl-certificate-key.