[TUTORIEL] - Passage de Gladys en HTTPS via Let's Encrypt

tutoriel

#1

Bonjour à tous,

Aujourd’hui, nous allons voir comment activer le protocole HTTPS pour Gladys.
Vous allez me dire, mais pourquoi faire cela ?
Et bien ma chère Ginette pour 2 très bonnes raisons.

  • 1ere : des connexions non sécurisées c’est mal.
  • 2ème : des connexions sécurisées c’est mieux.

Comment ça, je ne réponds pas à la question :smiley:

Plus sérieusement, premièrement cela est nécessaire pour certaines fonctionnalités (la fonction météo intégrée à Gladys, par exemple) ensuite cela évite que quelqu’un puisse intercepter facilement vos échanges avec Gladys.
Le second point n’est pas forcement utile en interne (quoi que maintenant avec certains logiciels espions…), cela est “obligatoire” lorsque votre instance Gladys est disponible depuis l’extérieur de votre maison.
Un exemple simple, un individu scrutant vos échanges avec Gladys (extrêmement facile à faire) sans HTTPS pourrait très facilement reprendre votre identification et contrôler Gladys sans même connaitre vos identifiants.

Pour ce tuto, je pars du principe que vous avez installé Gladys depuis l’image fournie sur le site et que vous êtes au moins en version 3.7.2.
De plus, je considère que vous avez votre propre nom domaine et que vous avez déjà fait une entrée DNS pointant sur votre IP publique et doit accéder à un site valide (dans notre cas Gladys en HTTP pour le moment).

1) Activation SSL dans Nginx

Nous allons commencer par activer la configuration avec un certificat auto-signé afin d’avoir les paramètres corrects dans la conf Nginx, si vous accédez déjà à Gladys via HTTPS passez à l’étape numéro 2 :

sudo ./enable-ssl-gladys.sh

Comptez au moins 30min sur un Rpi3 pour la création du certificat.
Avec cette manipulation, nous allons valider que la configuration Nginx fonctionne correctement.
Pendant que les certificats se génèrent, si cela n’est pas déjà fait, je vous invite à rediriger le port 443 de votre box sur l’IP interne de Gladys (au moins le temps du tuto).

2) Mise en place du certificat via Let’s Ecncrypt

Si tout fonctionne correctement lorsque vous vous connectez en https sur votre Gladys, nous pouvons passer à la suite :
Nous commençons par dupliquer le git de Let’s Encrypt et arrêter le service Nginx pour pouvoir utiliser le port 443 temporairement :

sudo git clone https://github.com/certbot/certbot /opt/letsencrypt
sudo service nginx stop

Puis

cd /opt/letsencrypt
sudo ./certbot-auto --standalone certonly -d **votre.domaine.com**

Acceptez l’installation des dépendances et remplir vos informations personnelles

Nous allons maintenant commenter les certificats autogénérés et ajouter les nouveaux, en éditant le fichier /etc/nginx/snippets/self-signed.conf :

sudo nano /etc/nginx/snippets/self-signed.conf

Vous devriez voir apparaitre :

#ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
#ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;

A transformer en :

#ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
#ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
ssl_certificate /etc/letsencrypt/live/**votre.domaine.com**/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/**votre.domaine.com**/privkey.pem;

Il ne nous reste plus qu’à redémarrer le service Nginx.

sudo service nginx start

3) Automatiser le renouvellement du certificat :

Peut-être que vous ne le savez pas (ou peut-être que si :wink: ) mais un certificat n’est valide que pour une période donnée (3mois chez Let’s Encrypt), il faut donc le renouveler régulièrement. L’outil utilisé précédemment permet de faire cela automatiquement sans intervention de notre part.
Pour cela, nous allons créer une tache cron pour l’utilisateur root (d’où le sudo) qui se lance tous les matins à 3h00 :

sudo crontab -e

Ajouter à la suite (adapter l’heure suivant votre souhait, pour vous aider vous pouvez utiliser : https://crontab.guru/ )

0 3 * * * /etc/init.d/nginx stop && /opt/letsencrypt/certbot-auto renew && /etc/init.d/nginx start

Attention :
Pensez à modifier la configuration de vos modules (ex : gladys-bluetooth et son fichier config.js), pour ne plus être ennuyé, il est conseillé de mettre http://votreinstancegladys:8080 celle-ci reste toujours accessible après le passage en HTTPS.

Le tuto est terminé, n’hésitez pas à poser des questions où à me faire un retour si quelque chose n’est pas clair :wink:


Passer Gladys en HTTPS?
IFTTT Google Home et webhook
IFTTT Google Home et webhook
[RESOLU] Interface Gladys bloquée et accès impossible en SSH
[RESOLU] Installation de gladys-voice et test
[RÉFÉRENTIEL] - Les tutoriels
#2

Simple, efficace. Thx.
#yapluka


#3

merci beaucoup je teste de se pas.

Édit : pour moi sur le Raspberry pi 3 la génération de la clef a mis 29min.
Édit : petit problemme il faut mertre quois a la place votre.domaine.com
192.168.0.17 ou gladys.local


#4

Il te faut un nom de domaine :wink:


#5

d’accor je peut le faire avec la freebox ou je doit en acheter un


#6

Tu peux essayer avec Google pour commencer :stuck_out_tongue_closed_eyes:


#7

je vais essaye avec celui de ma freebox voir si sa fonctionne car je ne connait pas du-tout sur Google je vais chercher car jai fait le tuto mai avec mon IP et Gladys ne veut plus rien savoir merci


#8

@Boimb Ty hésite pas à me dire si quelque chose devait ne pas passer (j’ai quand même refait le tuto complet de mon coté pour être sur que ça marche ;D)
@Kevinpierre Je n’ai jamais fait avec autre chose qu’un de mes noms de domaines donc je vais pas pouvoir te guider pour tout.
Je te conseil quand même de commencer par aller voir sur un fournisseur de DNS dynamique cf lien ci dessous.
L’objectif est que tu obtiennes un truc dans le genre : kevin.no-ip.com par exemple.
Une fois que tu auras ça, on repassera sur le tuto ensemble :wink:
Pour que ton Gladys refonctionne, tu peux remettre les certificats auto-signés en attendant en décommettant les 2 premières lignes et en commentant les 2 dernières (celle que l’on vient d’ajouter).

à voir ici ou ici ou ici , les versions gratuites sont suffisantes normalement.


#9

Sans problème. Je remets les mains dedans d’ici moins d’une semaine.
Je testerais avec mon Ip publique même, pour voir si le nom de domaine est obligatoire (Ip fixe).


#10

je pense que le certificat ssl sait pas fait pour moi j’ai toujours une erreur j’ai bien crée mon adresse sur no-ip et je lai activer :

pi@gladys:~ $ systemctl status nginx.service
● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled)
   Active: active (running) since sam. 2017-11-25 01:09:06 CET; 9min ago
  Process: 806 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
  Process: 705 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
 Main PID: 813 (nginx)
   CGroup: /system.slice/nginx.service
           ├─813 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           ├─814 nginx: worker process
           ├─815 nginx: worker process
           ├─816 nginx: worker process
           └─817 nginx: worker process

pi@gladys:~ $ journalctl -xn
No journal files were found.

   pi@gladys:~ $ sudo ./enable-ssl-gladys.sh
        Creating SSL Certificate
        Generating a 2048 bit RSA private key
        ..................................................................................+++
        ...................................................................................................+++
        writing new private key to '/etc/ssl/private/nginx-selfsigned.key'
        -----
        Creating strong Diffie-Hellman group
        Generating DH parameters, 2048 bit long safe prime, generator 2
        This is going to take a long time
        .........................................................................................................................................................................................................................................................+..............................+.................................................................................+....................................................................................................................+..................................+....................................................................+...........................................................+.........................+..................................................................+.............................................................................................................................+....+.......................................+..........................................................................................................................................................+....+.........+................................................................................................+........................................+.........................+...........................................................................................................................................................................................................................................................+...............................................................+.......................................................................................................................................................+.....+..................................................+..................................................................................................................................................................................+..........................................................................................................................................................................................................................................................+.....................+.........................................................................................+........................................................................+........................................................................................................................................................................................+..+....................................................................................................................................................................................................................................................................................................................................+..........................+........................................+........................................+.....................................................+............................................................................................+.........................................................+............................+.................................................................................................................................+..................................................................+.......................................+...................+..........................................+................................................+.....................+...........................+.........................................................................................+.............................................................................................................................................................................................................................+...........................................................................................................................................................................................................................................+...........................................+.............................................+.....+..................................................+.......................................................................................................................................+.....................+...............................................................................................................................................+........................+...............................................................................................+......................................................................................................................................................................................................................+..........................................................................+...............+..................................................................+.....................+............................................+.............................................................+..........................................................+.......................................+.......................+.............................................................................................................................+........................................................................................................................................................+............................................................................................+...........................................+........................+.............................................................................................................................................................................+.........................................................+.................................................................+............................................+.........................+..............................................................................................................................................................................................+..................................................................++*++*
        Using new configuration in Nginx
        ln: impossible de créer le lien symbolique « /etc/nginx/sites-enabled/gladys-ssl »: Le fichier existe
        rm: impossible de supprimer « /etc/nginx/sites-enabled/gladys »: Aucun fichier ou dossier de ce type
        Restarting Nginx
        Job for nginx.service failed. See 'systemctl status nginx.service' and 'journalctl -xn' for details.
        HTTPS is now active on Gladys ! Congrats :)

#11

On va essayer de te faire repartir tout ça.
Peux-tu nous donner les infos pour :

nano /etc/nginx/snippets/self-signed.conf
ls /etc/ssl/certs/n*
sudo ls /etc/ssl/private/n*


#12

D’accord je fini de réinstaller Gladys avec tout les mis jour et je refait ton tuto avec mon adresse crée sur no-ip (xxxxxxxxx.ddns.net) encore une foi et sa sera pas la dernière je crois honte a moi lol
je te tien au courant.

edit : pour etre sur les commande sont comme sa

sudo ./certbot-auto --standalone certonly -d xxxxxxx.ddns.net

#ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
#ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
ssl_certificate /etc/letsencrypt/live/xxxxxxxxx.ddns.net/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/xxxxxxxxxx.ddns.net/privkey.pem;


#13

Pas de souci, je suis là pour ça :wink:
Comme ça je dirai que oui c’est ça qu’il faut que tu fasses :wink:
Hésite pas à mettre de coté les traces que tu as pour nous les fournir si ça doit planter quelque part (ça devrait pas ^^)


#14

tu veut dire les logs pm2 ?


#15

nano /etc/nginx/snippets/self-signed.conf :

#ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
#ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
ssl_certificate /etc/letsencrypt/live/gladysdashboard.ddns.net/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/gladysdashboard.ddns.net/privkey.pem;

ls /etc/ssl/certs/n* :

/etc/ssl/certs/nginx-selfsigned.crt

sudo ls /etc/ssl/private/n* :

ls: impossible d'accéder à /etc/ssl/private/n*: Aucun fichier ou dossier de ce type

voila tous se que tu ma demander pour les log il sont tousse vide je sait pas pourquoi


#16

@Maegfea, tu devrais préciser dans ton tuto que le nom de domaine doit pointer vers un site valide, sinon, tu risque d’avoir une erreur lors de la création du certificat (comme l’a eu @Kevinpierre) :

Failed authorization procedure. gladysdashboard.ddns.net (tls-sni-01): urn:acme:error:connection :: The server could not connect to the client to verify the domain :: Error getting validation data

[EDIT] Je crois qu’il y a aussi une erreur dans la ligne du crontab :

0 3 * * * /etc/init.d/nginx stop && /opt/letsencrypt/certbot-auto renew && /etc/init.d/nginx stop

devrait être

0 3 * * * /etc/init.d/nginx stop && /opt/letsencrypt/certbot-auto renew && /etc/init.d/nginx start

#17

merci je vient de corriger le crontab -e


#18

Je comprend pas trop? du coup ca ne fonctionne pas pour les site ddns.net?

pi@gladys:/opt/letsencrypt $ sudo ./certbot-auto --standalone certonly -d XXXXXX.ddns.net
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Obtaining a new certificate
Performing the following challenges:
tls-sni-01 challenge for xxxxxx.ddns.net
Waiting for verification…
Cleaning up challenges
Failed authorization procedure. XXXX.ddns.net (tls-sni-01): urn:acme:error:connection :: The server could not connect to the client to verify the domain :: Timeout

IMPORTANT NOTES:

  • The following errors were reported by the server:

    Domain: XXXXXX.ddns.net
    Type: connection
    Detail: Timeout


#19

Si, mais il faut que Gladys soit accessible de l’extérieur, sinon lors de la création du certificat, le bot considère que l’adresse n’est pas valide, car pas de site rattaché :

En clair, il faut que ton IP public (celle fournie par ton FAI) soit redirigée vers l’IP locale de Gladys (192.168.1.x).


#20

mon problème c’est que j’y accède de cette façon XXXXX.ddns.net:433