diff --git a/certificate.md b/certificate.md index 244344d8..53ef663e 100644 --- a/certificate.md +++ b/certificate.md @@ -13,109 +13,83 @@ It could afraid a lot of users (rightly). To avoid this confusion, it's possible to get a signed certificate by a "known" authority : **Gandi**, **RapidSSL**, **StartSSL**, **CaCert**. In these cases, the point is to replace the self-signed certificate with the one that has been certified by a certificate authority, and the users won't have this warning screen anymore. -### Add a signed certificate by an authority +To avoid this confusion, it's possible to get a certificate signed a known +authority named **Let's Encrypt** which provide free certificates directly +recognized by browsers. YunoHost allows to directly install this certificate +from the web administration interface or from the command line. -Get your certificate from your CA, you must get a private key, file key and a public certificate (file .crt) -> Be carefull, the key file is very critical, it's strictly personal and have to be secured. +### Install a Let's Encrypt certificate -Copy this two files on the server, if not. +Before attempting to install a Let's Encrypt certificate, you should make sure +that your DNS is correctly configured (votre.domaine.tld should point to +your server's IP) and that your domain is accessible though HTTP from outside +your local network (i.e. at least port 80 should be forwarded to your server). -```bash -scp CERTIFICAT.crt admin@DOMAIN.TLD:ssl.crt -scp CLE.key admin@DOMAIN.TLD:ssl.key +#### From the web administration interface + +Go to the 'Domain' part of the admin interface, then in the section dedicated to +your.domain.tld. You should find a 'SSL certificate' button : + +![](./images/domain-certificate-button.png) + +In the 'SSL certificate' section, you can see the status of the current +certificate. If you just added the domain, it should be a self-signed +certificate. + +![](./images/certificate-before-LE.png) + +If your domain is correctly configured, it is then possible to install the +Let's Encrypt certificate via the green button. + +![](./images/certificate-after-LE.png) + +Once the install is made, you can check that the certificate is live via your +browser by going to your domain in HTTPS. The certificate will automatically +be renewed every three months. + +![](./images/certificate-signed-by-LE.png) + +#### From the command line interface + +Connect to your server through SSH. + +You can check the status of your current certificate with : + +``` +yunohost domain cert-status your.domain.tld ``` -From Windows, scp can be used with putty, download [pscp](http://the.earth.li/~sgtatham/putty/latest/x86/pscp.exe) +Install a Let's Encrypt certificate with -```bash -pscp -P 22 CERTIFICAT.crt admin@DOMAIN.TLD:ssl.crt -pscp -P 22 CLE.key admin@DOMAIN.TLD:ssl.key``` +``` +yunohost domain cert-install your.domain.tld +``` -Now the files are in the server. Open a shell on the server use [ssh](https://yunohost.org/#/ssh_fr) or locally. +This should return : -First, create a directory for archive the certificates. +``` +Success! The SSOwat configuration has been generated +Success! Successfully installed Let's Encrypt certificate for domain DOMAIN.TLD! +``` -```bash -sudo mkdir /etc/yunohost/certs/DOMAIN.TLD/ae_certs -sudo mv ssl.key ssl.crt /etc/yunohost/certs/DOMAIN.TLD/ae_certs/``` +Once this is done, you can check that the certificate is live via your +browser by going to your domain in HTTPS. The certificate will automatically +be renewed every three months. -Then go to the parent directory and go on. +##### Troubleshooting -```bash -cd /etc/yunohost/certs/DOMAIN.TLD/``` +If due to some bad tweaking, your certificate ends up in a bad state (e.g. +lost the certificate or unable to read the files), you should be able to clean +the situation by regenerating a self-signed certificate : -Make a backup of the YunoHost original certificates , to be safe! +``` +yunohost domain cert-install your.domain.tld --self-signed --force +``` -```bash -sudo mkdir yunohost_self_signed -sudo mv *.pem *.cnf yunohost_self_signed/``` +If YunoHost thinks that your domain is badly configured despite the fact that +you checked the DNS configuration and you have access in HTTP to your server +from outside your local network, then you can : -Depends on the CA, intermediate certificates and root have to be downloaded. - -> **StartSSL** -> ```bash -> sudo wget http://www.startssl.com/certs/ca.pem -O ae_certs/ca.pem -> sudo wget http://www.startssl.com/certs/sub.class1.server.ca.pem -O ae_certs/intermediate_ca.pem``` - -> **Gandi** -> ```bash -> sudo wget https://www.gandi.net/static/CAs/GandiStandardSSLCA.pem -O ae_certs/intermediate_ca.pem``` - -> **RapidSSL** -> ```bash -> sudo wget https://knowledge.rapidssl.com/library/VERISIGN/INTERNATIONAL_AFFILIATES/RapidSSL/AR1548/RapidSSLCABundle.txt -O ae_certs/intermediate_ca.pem``` - -> **Cacert** -> ```bash -> sudo wget http://www.cacert.org/certs/root.crt -O ae_certs/ca.pem -> sudo wget http://www.cacert.org/certs/class3.crt -O ae_certs/intermediate_ca.pem``` - -Intermediate certificates and root must be merged with certificates obtained to create a unified chain certificates. - -```bash -cat ae_certs/ssl.crt ae_certs/intermediate_ca.pem ae_certs/ca.pem | sudo tee crt.pem``` - - -The private key have to be converted in PEM format. - -```bash -sudo openssl rsa -in ae_certs/ssl.key -out key.pem -outform PEM``` - -Check certificates syntaxe, check file contents. - -```bash -cat crt.pem key.pem``` - -Certificates and private key look like this : - -`-----BEGIN CERTIFICATE-----` -`MIICVDCCAb0CAQEwDQYJKoZIhvcNAQEEBQAwdDELMAkGA1UEBhMCRlIxFTATBgNV` -`BAgTDENvcnNlIGR1IFN1ZDEQMA4GA1UEBxMHQWphY2NpbzEMMAoGA1UEChMDTExC` -`MREwDwYDVQQLEwhCVFMgSU5GTzEbMBkGA1UEAxMSc2VydmV1ci5idHNpbmZvLmZy` -`MB4XDTA0MDIwODE2MjQyNloXDTA0MDMwOTE2MjQyNlowcTELMAkGA1UEBhMCRlIx` -`FTATBgNVBAgTDENvcnNlIGR1IFN1ZDEQMA4GA1UEBxMHQWphY2NpbzEMMAoGA1UE` -`ChMDTExCMREwDwYDVQQLEwhCVFMgSU5GTzEYMBYGA1UEAxMPcHJvZi5idHNpbmZv` -`LmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDSUagxPSv3LtgDV5sygt12` -`kSbN/NWP0QUiPlksOkF2NkPfwW/mf55dD1hSndlOM/5kLbSBo5ieE3TgikF0Iktj` -`BWm5xSqewM5QDYzXFt031DrPX63Fvo+tCKTQoVItdEuJPMahVsXnDyYHeUURRWLW` -`wc0BzEgFZGGw7wiMF6wt5QIDAQABMA0GCSqGSIb3DQEBBAUAA4GBALD640iwKPMf` -`pqdYtfvmLnA7CiEuao60i/pzVJE2LIXXXbwYjNAM+7Lov+dFT+b5FcOUGqLymSG3` -`kSK6OOauBHItgiGI7C87u4EJaHDvGIUxHxQQGsUM0SCIIVGK7Lwm+8e9I2X0G2GP` -`9t/rrbdGzXXOCl3up99naL5XAzCIp6r5` -`-----END CERTIFICATE-----` - -At last, secure files of your certificate - -```bash -sudo chown root:metronome crt.pem key.pem -sudo chmod 640 crt.pem key.pem -sudo chown root:root -R ae_certs -sudo chmod 600 -R ae_certs``` - -Reload Nginx configuration to take into account the new certificate. - -```bash -sudo service nginx reload``` - -Your certificate is ready to serve. You can check that every thing is correct byan external service like geocerts +- add a line `127.0.0.1 your.domain.tld` to the file `/etc/hosts` on your server ; +- if the certificate installation still doesn't work, you can disable the checks with `--no-checks` after the `cert-install` command. diff --git a/certificate_fr.md b/certificate_fr.md index 23b9a5ab..834e9bf0 100644 --- a/certificate_fr.md +++ b/certificate_fr.md @@ -2,121 +2,94 @@ Un certificat est utilisé pour garantir la confidentialité des échanges entre votre serveur et votre client. -YunoHost fournit par défaut un certificat **auto-signé**, ce qui veut dire que c’est votre serveur qui garantit la validité du certificat. C’est suffisant **pour un usage personnel**, car vous pouvez avoir confiance en votre serveur, en revanche cela posera problème si vous comptez ouvrir l’accès à votre serveur à des anonymes, par exemple pour héberger un site web. +YunoHost fournit par défaut un certificat **auto-signé**, ce qui veut dire que c’est votre serveur qui garantit la validité du certificat. C’est suffisant **pour un usage personnel**, car vous pouvez avoir confiance en votre serveur, en revanche cela posera problème si vous comptez ouvrir l’accès à votre serveur à des anonymes, par exemple pour héberger un site web. En effet, les utilisateurs devront passer par un écran de ce type : -Cet écran revient à demander **« Avez-vous confiance au serveur qui héberge ce site ? »**. +Cet écran revient à demander **« Avez-vous confiance au serveur qui héberge ce site ? »**. Cela peut effrayer vos utilisateurs (à juste titre). -Pour éviter cette confusion, il est possible d’obtenir un certificat signé par une autorité « connue » : **Gandi**, **RapidSSL**, **StartSSL**, **Cacert**. -Dans ce cas, il s’agira de remplacer le certificat auto-signé par celui qui a été reconnu par une autorité de certification, et vos utilisateurs n’auront plus à passer par cet écran d’avertissement. +Pour éviter cette confusion, il est possible d’obtenir un certificat signé par +une autorité « connue » qui est **Let's Encrypt** et qui propose des +certificats gratuits et reconnus directement par les navigateurs. YunoHost +permet d'installer directement un tel certificat depuis l'interface +d'administration ou la ligne de commande. -### Ajout d’un certificat signé par une autorité +### Installer un certificat Let's Encrypt -Après création du certificat auprès de votre autorité d’enregistrement, vous devez être en possession d’une clé privée, le fichier key et d’un certificat public, le fichier crt. -> Attention, le fichier key est très sensible, il est strictement personnel et doit être très bien sécurisé. +Avant de chercher à installer un certificat Let's Encrypt, assurez vous que +votre DNS est correctement configuré (votre.domaine.tld doit pointer sur l'IP +de votre serveur) et que votre site est accessible en HTTP depuis l'extérieur +(i.e. qu'au moins le port 80 est correctement redirigé vers votre serveur). -Ces deux fichiers doivent être copiés sur le serveur, s’ils ne s’y trouvent pas déjà. +#### Via l'interface d'administration web -```bash -scp CERTIFICAT.crt admin@DOMAIN.TLD:ssl.crt -scp CLE.key admin@DOMAIN.TLD:ssl.key +Rendez-vous dans la partie 'Domaine' de l'interface d'administration, puis dans +la section dédiée à votre domaine. Vous trouverez un bouton 'Certificat SSL'. + +![](./images/domain-certificate-button-fr.png) + +Dans la section 'Certificat SSL', vous pourrez voir l'état actuel du certificat. +Si vous venez d'ajouter le domaine, il dispose d'un certificat auto-signé. + +![](./images/certificate-before-LE-fr.png) + +Si votre domaine est correctement configuré, il vous est alors possible de +passer à un certificat Let's Encrypt via le bouton vert. + +![](./images/certificate-after-LE-fr.png) + +Une fois l'installation effectuée, vous pouvez vous rendre sur votre domaine +via votre navigateur, en HTTPS, pour vérifier que votre certificat est bien +signé par Let's Encrypt. Le certificat sera renouvelé automatiquement tous les +trois mois environ. + +![](./images/certificate-signed-by-LE.png) + +#### Via la ligne de commande + +Connectez-vous sur votre serveur en SSH. + +Vous pouvez vérifier le statut actuel de votre certificat via + +``` +yunohost domain cert-status votre.domaine.tld ``` -Depuis Windows, scp est exploitable avec putty, en téléchargeant l’outil [pscp](http://the.earth.li/~sgtatham/putty/latest/x86/pscp.exe) +Installez le certificat Let's Encrypt via -```bash -pscp -P 22 CERTIFICAT.crt admin@DOMAIN.TLD:ssl.crt -pscp -P 22 CLE.key admin@DOMAIN.TLD:ssl.key``` +``` +yunohost domain cert-install votre.domaine.tld +``` -Dès lors que les fichiers sont sur le serveur, le reste du travail se fera sur celui-ci. En [ssh](https://yunohost.org/#/ssh_fr) ou en local. +Cette commande doit retouner : -Tout d’abord, créez un dossier pour stocker les certificats obtenus. +``` +Success! The SSOwat configuration has been generated +Success! Successfully installed Let's Encrypt certificate for domain DOMAIN.TLD! +``` -```bash -sudo mkdir /etc/yunohost/certs/DOMAIN.TLD/ae_certs -sudo mv ssl.key ssl.crt /etc/yunohost/certs/DOMAIN.TLD/ae_certs/``` +Une fois l'installation effectuée, vous pouvez vous rendre sur votre domaine +via votre navigateur, en HTTPS, pour vérifier que votre certificat est bien +signé par Let's Encrypt. Le certificat sera renouvelé automatiquement tous les +trois mois environ. -Puis allez dans le dossier parent pour poursuivre. +##### En cas de problème -```bash -cd /etc/yunohost/certs/DOMAIN.TLD/``` +Si suite à une mauvaise manipulation, un certificat se retrouve dans une +situation fâcheuse (e.g. perte du certificat ou impossible de lire le +certificat), il est possible de repartir sur des bases propres en regénérant un +certificat auto-signé : -Faites une sauvegarde des certificats d’origine de yunohost, par précaution. +``` +yunohost domain cert-install votre.domaine.tld --self-signed --force +``` -```bash -sudo mkdir yunohost_self_signed -sudo mv *.pem *.cnf yunohost_self_signed/``` +Si YunoHost trouve que votre domaine est mal configuré quand bien même vous +avez bien vérifié votre configuration DNS et avez bien accès à votre serveur en +HTTP depuis l'extérieur, vous pouvez tenter : -En fonction de l’autorité d’enregistrement, des certificats intermédiaires et racines doivent être obtenus. +- d'ajouter une ligne `127.0.0.1 votre.domaine.tld` au fichier `/etc/hosts` sur votre serveur ; +- si l'installation ne fonctionne toujours pas, désactiver les vérifications en ajouter `--no-checks` à la commande `cert-install`. -> **StartSSL** -> ```bash -> sudo wget http://www.startssl.com/certs/ca.pem -O ae_certs/ca.pem -> sudo wget http://www.startssl.com/certs/sub.class1.server.ca.pem -O ae_certs/intermediate_ca.pem``` - -> **Gandi** -> ```bash -> sudo wget https://www.gandi.net/static/CAs/GandiStandardSSLCA.pem -O ae_certs/intermediate_ca.pem``` -> Attention si votre certificat expire après le 01/01/2017, choisissez le certificat intermédiaire SHA2 suivant (à la place du certificat SHA1 précédent) -> ```bash -> sudo wget https://www.gandi.net/static/CAs/GandiStandardSSLCA2.pem -O ae_certs/intermediate_ca.pem``` - -> **RapidSSL** -> ```bash -> sudo wget https://knowledge.rapidssl.com/library/VERISIGN/INTERNATIONAL_AFFILIATES/RapidSSL/AR1548/RapidSSLCABundle.txt -O ae_certs/intermediate_ca.pem``` - -> **Cacert** -> ```bash -> sudo wget http://www.cacert.org/certs/root.crt -O ae_certs/ca.pem -> sudo wget http://www.cacert.org/certs/class3.crt -O ae_certs/intermediate_ca.pem``` - -Les certificats intermédiaires et root doivent être réunis avec le certificat obtenu pour créer une chaîne de certificats unifiés. - -```bash -cat ae_certs/ssl.crt ae_certs/intermediate_ca.pem ae_certs/ca.pem | sudo tee crt.pem``` - -La clé privée doit être, elle, convertie au format pem. - -```bash -sudo openssl rsa -in ae_certs/ssl.key -out key.pem -outform PEM``` - -Afin de s’assurer de la syntaxe des certificats, vérifiez le contenu des fichiers. - -```bash -cat crt.pem key.pem``` - -Les certificats et la clé privée doivent ressembler à cela : - -`-----BEGIN CERTIFICATE-----` -`MIICVDCCAb0CAQEwDQYJKoZIhvcNAQEEBQAwdDELMAkGA1UEBhMCRlIxFTATBgNV` -`BAgTDENvcnNlIGR1IFN1ZDEQMA4GA1UEBxMHQWphY2NpbzEMMAoGA1UEChMDTExC` -`MREwDwYDVQQLEwhCVFMgSU5GTzEbMBkGA1UEAxMSc2VydmV1ci5idHNpbmZvLmZy` -`MB4XDTA0MDIwODE2MjQyNloXDTA0MDMwOTE2MjQyNlowcTELMAkGA1UEBhMCRlIx` -`FTATBgNVBAgTDENvcnNlIGR1IFN1ZDEQMA4GA1UEBxMHQWphY2NpbzEMMAoGA1UE` -`ChMDTExCMREwDwYDVQQLEwhCVFMgSU5GTzEYMBYGA1UEAxMPcHJvZi5idHNpbmZv` -`LmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDSUagxPSv3LtgDV5sygt12` -`kSbN/NWP0QUiPlksOkF2NkPfwW/mf55dD1hSndlOM/5kLbSBo5ieE3TgikF0Iktj` -`BWm5xSqewM5QDYzXFt031DrPX63Fvo+tCKTQoVItdEuJPMahVsXnDyYHeUURRWLW` -`wc0BzEgFZGGw7wiMF6wt5QIDAQABMA0GCSqGSIb3DQEBBAUAA4GBALD640iwKPMf` -`pqdYtfvmLnA7CiEuao60i/pzVJE2LIXXXbwYjNAM+7Lov+dFT+b5FcOUGqLymSG3` -`kSK6OOauBHItgiGI7C87u4EJaHDvGIUxHxQQGsUM0SCIIVGK7Lwm+8e9I2X0G2GP` -`9t/rrbdGzXXOCl3up99naL5XAzCIp6r5` -`-----END CERTIFICATE-----` - -Enfin, sécurisez les fichiers de votre certificat. - -```bash -sudo chown root:metronome crt.pem key.pem -sudo chmod 640 crt.pem key.pem -sudo chown root:root -R ae_certs -sudo chmod 600 -R ae_certs``` - -Rechargez la configuration de nginx pour prendre en compte le nouveau certificat. -```bash -sudo service nginx reload``` - - -Votre certificat est prêt à servir. Vous pouvez toutefois vous assurez de sa mise en place en testant le certificat à l’aide du service de geocerts. diff --git a/images/certificate-after-LE-fr.png b/images/certificate-after-LE-fr.png new file mode 100644 index 00000000..c2c41313 Binary files /dev/null and b/images/certificate-after-LE-fr.png differ diff --git a/images/certificate-after-LE.png b/images/certificate-after-LE.png new file mode 100644 index 00000000..6b55fe99 Binary files /dev/null and b/images/certificate-after-LE.png differ diff --git a/images/certificate-before-LE-fr.png b/images/certificate-before-LE-fr.png new file mode 100644 index 00000000..3a50a8d1 Binary files /dev/null and b/images/certificate-before-LE-fr.png differ diff --git a/images/certificate-before-LE.png b/images/certificate-before-LE.png new file mode 100644 index 00000000..bfc896db Binary files /dev/null and b/images/certificate-before-LE.png differ diff --git a/images/certificate-signed-by-LE.png b/images/certificate-signed-by-LE.png new file mode 100644 index 00000000..aad3c51f Binary files /dev/null and b/images/certificate-signed-by-LE.png differ diff --git a/images/domain-certificate-button-fr.png b/images/domain-certificate-button-fr.png new file mode 100644 index 00000000..ae8c4359 Binary files /dev/null and b/images/domain-certificate-button-fr.png differ diff --git a/images/domain-certificate-button.png b/images/domain-certificate-button.png new file mode 100644 index 00000000..998c2f21 Binary files /dev/null and b/images/domain-certificate-button.png differ