mirror of
https://github.com/YunoHost/doc.git
synced 2024-09-03 20:06:26 +02:00
173 lines
9.5 KiB
Markdown
173 lines
9.5 KiB
Markdown
|
||
Gestion du certificat
|
||
======================
|
||
|
||
Gérer les certificats avec YunoHost
|
||
-----------------------------------
|
||
|
||
La fonctionnalité principale du gestionnaire de certificat est de permettre l'installation
|
||
de certificat Let's Encrypt facilement sur vos domaines. Vous pouvez l'utiliser depuis
|
||
l'interface d'admin web (*Certificat SSL* sur la page d'info d'un domaine), ou avec
|
||
la ligne de commande avec `yunohost domain cert-status`, `cert-install` et `cert-renew`.
|
||
|
||
#### De quoi ai-je besoin pour avoir un certificat Let’s Encrypt ?
|
||
|
||
Votre serveur doit être accessible depuis le reste d'Internet sur le port 80 (et 443),
|
||
et le DNS de votre `nom.de.domaine.tld` doit être correctement configuré (i.e. le
|
||
domaine doit pointer sur l'IP publique de votre serveur). Vous pouvez vous aider
|
||
de [cette documentation](diagnostic_fr) si vous avez besoin d'aide.
|
||
|
||
#### Est-ce que mon certificat sera renouvelé automatiquement ?
|
||
|
||
Oui. À l'heure actuelle, les certificats Let's Encrypt sont valides pendant 90 jours.
|
||
Une tâche automatique (cron job) sera exécutée tous les jours pour renouveler les certificats
|
||
qui expirent dans moins de 15 jours. Un email sera envoyé à l'utilisateur root si le
|
||
renouvellement échoue.
|
||
|
||
#### Je souhaite/j’ai besoin d’utiliser un certificat d’une autre autorité de certification
|
||
|
||
Ceci n'est pas géré automatiquement pour le moment. Il vous faudra créer manuellement
|
||
une demande de signature de certificat (CSR) qui devra être donné à votre CA, puis importer
|
||
le certificat obtenu. Plus d'informations sur [cette page](certificate_fr). Ce processus sera
|
||
peut-être rendu plus facile par YunoHost dans le futur.
|
||
|
||
Procédure de migration
|
||
--------------------
|
||
|
||
> À cause des [limitations actuelles](https://letsencrypt.org/docs/rate-limits/)
|
||
sur la fréquence d'émissions de nouveaux certificats Let's Encrypt, nous recommandons que
|
||
vous ne **migriez pas** vers cette nouvelle fonctionnalité **tant que vous n'en avez pas besoin**.
|
||
C'est en particulier vrai pour les utilisateurs de nohost.me / nohost.st (et d'autres services de
|
||
nom de domaine gratuit qui partagent un sous-domaine commun). Si trop de monde migrent
|
||
pendant la même période, vous vous retrouverez peut-être bloqué avec un certificat auto-signé
|
||
pendant quelques jours !
|
||
|
||
#### J’ai utilisé l’application *letsencrypt_ynh*.
|
||
|
||
Il vous sera demandé de désinstaller l'application pour pouvoir utiliser la nouvelle gestion
|
||
de certificat. Vous pouvez procéder à la désinstallation depuis l'interface web, ou bien depuis
|
||
la ligne de commande avec :
|
||
|
||
```bash
|
||
yunohost app remove letsencrypt
|
||
yunohost domain cert-install
|
||
```
|
||
|
||
Soyez conscients que la première commande devrait remettre en place des certificats
|
||
auto-signés sur vos domaines. La deuxième commande tentera ensuite d'installer un certificat
|
||
Let's Encrypt sur chacun de vos domaines ayant un certificat auto-signé.
|
||
|
||
#### J’ai installé mes certificats Let’s Encrypt manuellement
|
||
|
||
Il vous faut aller dans la configuration nginx et retirer les fichiers `letsencrypt.conf` (ou le nom que
|
||
vous lui avez donné et qui contient un bloc `location '/.well-known/acme-challenge'`) pour chacun
|
||
de vos domaines.
|
||
|
||
Tapez la commande suivante :
|
||
|
||
```bash
|
||
yunohost domain cert-install your.domain.tld --force
|
||
```
|
||
|
||
pour chacun des domaines pour lesquels vous souhaitez avoir un certificat Let's Encrypt.
|
||
|
||
Finalement, supprimez la tâche automatique (certificateRenewer) dans `/etc/cron.weekly/`,
|
||
et backupez puis supprimez le répertoire `/etc/letsencrypt/`.
|
||
|
||
Dépannage
|
||
---------------
|
||
|
||
#### L’interface d’admin bloque l’accès à l’interface de gestion du certificat en prétendant que l’app letsencrypt est installée, pourtant elle n’est pas là !
|
||
|
||
Assurez-vous que le cache du navigateur est bien rafraîchi (Ctrl + Shift + R sur Firefox).
|
||
Si cela ne résous pas le problème, rapportez votre expérience sur le bugtracker ou le forum.
|
||
Vous pouvez contourner le problème en utilisant la commande :
|
||
`yunohost domain cert-install your.domain.tld`.
|
||
|
||
#### J’ai essayé de désinstaller l’application Let’s Encrypt, mais cela a cassé ma configuration nginx !
|
||
|
||
Désolé. Quelques utilisateurs ont rapporté que cela arrive lorsque le script de désinstallation ne trouve pas
|
||
de backup des certificats auto-signés. Utiliser `yunohost domain cert-install` devrait tout de même fonctionner…
|
||
|
||
#### J’obtiens "Too many certificates already issued", que se passe-t-il ?
|
||
|
||
Pour l'instant, Let's Encrypt a mis en place un taux limite d'émission de certificat, qui
|
||
est de 20 nouveaux certificats pendant une période de 7 jours pour un sous-domaine donné.
|
||
Par exemple, les domaines `nohost.me` et `noho.st` sont considérés comme des sous-domaines
|
||
(des domaines `me` et `st`). ce qui veut dire que tous les utilisateurs du service nohost.me / noho.st
|
||
partagent une même limite commune. D'après Let's Encrypt, ceci s'applique aux *nouveaux* certificats,
|
||
mais pas aux renouvellements ou duplications. Si vous rencontrez ce message, il n'y a donc pas grand
|
||
chose à faire d’autre que ré-essayer dans quelques heures/jours.
|
||
|
||
#### L’installation du certificat échoue avec "Wrote file to 'un chemin', but couldn't download 'une url'" !
|
||
|
||
Cela devrait être réparé dans le futur, mais pour le moment vous pouvez tenter d'ajouter la ligne suivante
|
||
au fichier `/etc/hosts` du serveur :
|
||
|
||
```bash
|
||
127.0.0.1 your.domain.tld
|
||
```
|
||
|
||
À propos des certificats et de Let’s Encrypt
|
||
------------------------------------
|
||
|
||
#### Qu’est-ce que HTTPS ? À quoi servent les certificats SSL ?
|
||
|
||
HTTPS est la version sécurisée du protocole HTTP, qui décrit comment un client
|
||
(par ex. votre navigateur web) et un serveur (par ex. nginx qui tourne sur votre instance
|
||
YunoHost) peuvent discuter entre eux. HTTPS s'appuie fortement sur la [cryptographie
|
||
asymmétrique](https://en.wikipedia.org/wiki/Public-key_cryptography) pour garantir
|
||
deux choses :
|
||
- la confidentialité, ce qui veut dire qu'un attaquant ne sera pas capable de déchiffrer le contenu d'une communication si elle est interceptée ;
|
||
- l'identification du serveur, ce qui veut dire qu'un serveur peut et doit prouver qui il prétend être, dans le but d'éviter les [attaques man-in-the-middle](https://en.wikipedia.org/wiki/Man-in-the-middle_attack).
|
||
|
||
Les certificats SSL sont utilisés par les serveurs pour prouver leur identitié.
|
||
Le processus général repose sur la confiance en des tiers, appelés Autorité
|
||
de Certification (CA), dont le rôle est de vérifier l'identité d'un serveur (par ex.
|
||
qu'une machine donnée contrôle bien le domaine `jaimelecafe.com`) avant
|
||
de délivrer des [certificats cryptographiques](https://en.wikipedia.org/wiki/Public_key_certificate).
|
||
|
||
#### Pourquoi est-ce que les navigateurs se plaignent de mon certificat auto-signé ?
|
||
|
||
Les certificats auto-signés sont, comme leur nom l'indique, auto-signés, ce qui veut
|
||
dire que le serveur était sa propre autorité de certification lorsqu'il a créé le certificat.
|
||
Un tel certificat ne permet pas de vérifier et garantir l'identité du serveur, puisqu'il
|
||
aurait tout aussi pu être généré par un attaquant de son côté, dans le but de réaliser
|
||
une attaque man-in-the-middle.
|
||
|
||
#### Que se passe-t-il avec Let’s Encrypt ?
|
||
|
||
Historiquement, le processus de vérification de l'identité des serveurs demandait une
|
||
intervention humaine, donc du temps et de la monnaie.
|
||
|
||
En 2015, Let's Encrypt a développé un protocole nommé
|
||
[ACME](https://en.wikipedia.org/wiki/Automated_Certificate_Management_Environment),
|
||
qui permet de vérifier automatiquement qu'une machine contrôle un domaine, et de
|
||
délivrer un certificat gratuitement, réduisant drastiquement le coût de mise en place
|
||
d'un certificat SSL.
|
||
|
||
#### Comment fonctionne Let’s Encrypt ?
|
||
|
||
Pour vérifier l'identité de votre serveur et délivrer un certificat, Let's Encrypt utilise
|
||
le [protocole ACME](https://en.wikipedia.org/wiki/Automated_Certificate_Management_Environment).
|
||
Il fonctionne grosso-modo de la manière suivante (simplifiée, mais vous comprendrez l'idée) :
|
||
- Un programme tourne sur votre serveur et contacte l'autorité de certification Let's Encrypt et
|
||
lui demande un certificat pour le domaine `jaimelecafe.com`.
|
||
- L'autorité de certification Let's Encrypt génère une chaîne de caractères aléatoire comme `A84F2D0B`, et
|
||
dit au programme sur votre serveur de prouver qu'il gère le domaine `jaimelecafe.com` en rendant l'URI
|
||
`http://jaimelecafe.com/.well-known/acme-challenge/A84F2D0B` accessible.
|
||
- Le programme sur votre serveur créé/modifie des fichiers en conséquence.
|
||
- La CA Let's Encrypt tente d'accéder à l'URI. Si cela fonctionne, elle conclue que le programme contrôle
|
||
bien le domaine `jaimelecafe.com`, et lui délivre un certificat.
|
||
- Le programme sur votre serveur récupère le certificat et le met en place.
|
||
|
||
#### A-t-on vraiment besoin des autorités de certification ?
|
||
|
||
La dépendance aux autorités de certification peut être critiquée, car elles constituent des points centraux
|
||
vulnérables dans le schéma de sécurité. Certaines autorités ont été reconnues coupable d'avoir délivré
|
||
de faux certificats par le passé, parfois avec des implications sérieuses et très concrètes.
|
||
[[1](http://www.darkreading.com/endpoint/authentication/fake-google-digital-certificates-found-and-confiscated/d/d-id/1297165),
|
||
[2](https://reflets.info/microsoft-et-ben-ali-wikileaks-confirme-les-soupcons-d-une-aide-pour-la-surveillance-des-citoyens-tunisiens/)].
|
||
|
||
Des alternatives ont été proposées, comme [DANE/DNSSEC](https://en.wikipedia.org/wiki/DNS-based_Authentication_of_Named_Entities),
|
||
qui repose sur les DNS et ne nécessite pas d'autorité de certification.
|