Accéder depuis l’extérieur à Jeedom en Https

par | Oct 15, 2014 | Jeedom | 25 commentaires

Pour faire un site web en Https (http sécurisé avec une couche de chiffrement SSL), il faut utiliser un certificat électronique. Ce certificat peut être auto-signé ou signé par une autorité de certification (tiers de confiance) que l’on appellera Certificat de confiance.

Pour générer un certificat, il faut posséder son propre nom de domaine (DNS) qu’il est possible d’acheter sur différents site comme Gandi, OVH, … pour un prix d’environ 10€ H.T. par an.

Remarque : Un nom de domaine dynamique (dyndns, no-ip, …) ne peut pas être utilisé car vous devez être propriétaire du nom de domaine racine (ex : chezmoi.fr).

Connaissance nécessaire : se connecter en ssh sur le serveur JEEDOM.

Le problème d’un certificat auto-signé c’est que certains navigateurs (Pour des raisons de sécurité) refusent toutes connexions à des sites en Https dont le certificat n’est pas émis par un tiers de confiance. D’autres (plus intelligents) vous permettent quand même d’y accéder après avoir affiché un avertissement ou mieux proposent d’ajouter une exception pour le site en question.

Nous allons voir comment générer ces certificats et vous pourrez choisir l’une ou l’autre de ces solutions.

Pour ce tuto, non admettrons que le nom de domaine que nous avons acheté s’appelle chezmoi.fr.

1. Https avec un certificat auto-signé

Pour générer un certificat auto-signé, connectez-vous en ssh sur le serveur JEEDOM et tapez les commandes suivantes :

$ sudo mkdir /etc/nginx/ssl

$ cd /etc/nginx/ssl

$ sudo openssl req -x509 -nodes -days 1095 -newkey rsa:4096 -keyout jeedom.chezmoi.fr.key -out jeedom.chezmoi.fr.crt

La dernière commande va créer un certificat avec une clé de chiffrement de 4096 bits et qui sera valide pendant 1095 jours. Afin de le créer, quelques informations vont vous être demandées (Vous pouvez mettre ce que vous voulez sauf dans la partie « Common Name » où il faut absolument donner le nom de domaine pour lequel vous allez utiliser le certificat) :

  • « Country Name » : Le code du pays sur 2 lettres. (Ex: FR)
  • « State or Province Name » : Le nom de votre département.
  • « Locality Name » : Le nom de votre ville.
  • « Organization Name » : Le nom de votre société. (Ex : Jeedom)
  • « Common Name » : Votre nom de domaine. (Ex : jeedom.chezmoi.fr)
  • « Email Address » : Votre adresse mail.

Une fois le certificat généré, on protège la clé privée :

$ sudo chmod 400 jeedom.chezmoi.fr.key

Et on modifie le fichier de configuration de nginx (le serveur web) afin que le serveur JEEDOM accepte les connexions en http et Https :

$ sudo vi /etc/nginx/sites-enabled/default

Ajouter les lignes suivantes, entre les lignes « server { »  et « root /usr/share/nginx/www ; » :

listen 80;

listen 443 ssl;

ssl_certificate /etc/nginx/ssl/ jeedom.chezmoi.fr.crt;

ssl_certificate_key /etc/nginx/ssl/ jeedom.chezmoi.fr.key;

ssl_session_timeout 5m;

Enfin on redémarre nginx :

$ sudo service nginx restart

C’est fini pour le certificat, il ne reste plus qu’à bien configurer votre nom de domaine chezmoi.fr et le sous-domaine jeedom.chezmoi.fr ainsi que la redirection de port sur votre box afin d’accéder à votre box JEEDOM de l’extérieur en Https. (Cf. III. Gestion du nom de domaine & redirection)

Remarque : Avec cette configuration de nginx, JEEDOM est toujours accessible en http normal.

2. Https avec un certificat de confiance gratuit

a. S’inscrire sur StartSSL

Il existe pas mal de site sur lequel acheter un certificat émis par une autorité de certification (Ex : Gandi à partir de 12€ pour 1 adresse pour 1 an). Mais par le biais du site StartSSL, il est possible de générer un certificat de confiance gratuit pour un domaine et un sous-domain. Ce qui nous suffit largement pour sécuriser l’accès à jeedom.

Afin de générer le certificat, rendez-vous sur le site https://www.startssl.com, dans le menu choisir « StartSSL Produits » et cliquer l’image « No Kidding, 100% Free » dans la case StartSSL Free.

Jeedom-https-startssl001

Cliquer sur « Express Lane ».

Jeedom-https-startssl002

Ensuite remplissez le formulaire qui permet de connaître la personne physique à qui sera délivré le certificat (Le remplir avec des informations valides).

Jeedom-https-startssl003

Un email de confirmation vous est envoyé sur l’adresse mail renseignée avec un code de validation. Renseignez ce code dans la page qui s’est affichée. (Attention à ne pas fermer la page avant.)

Jeedom-https-startssl004

Une fois l’adresse mail validée, il peut se passer deux cas de figure :

  • Soit startssl génère de suite un certificat client qui vous servira à vous authentifier sur leur site et il vous proposera de l’installer dans votre navigateur.
  • Soit il vous faudra attendre (Que l’inscription soit validée) la réception d’un mail (« StartSSL Account Request ») contenant un lien et un code de vérification. Suivez ce lien et entrer le code de vérification afin de pouvoir installer le certificat client dans votre navigateur.

Jeedom-https-startssl005

Cliquer sur Install.

Jeedom-https-startssl006

Remarque : Une fois le certificat installé dans le navigateur, il faut absolument le sauvegarder, car si vous le perdez, vous ne pourrez plus accéder à votre compte sur startssl. En effet l’authentification sur startssl ne fonctionne pas comme d’habitude avec identifiant/mot de passe, mais utilise ce certificat client. Pour cela chercher une procédure correspondant à votre navigateur pour exporter un certificat, le certificat doit se trouver dans le magasin personnel avec comme nom « StartCom Ltd. ».

b. Valider le nom de domaine

Après l’installation du certificat client, on va valider le nom de domaine que l’on souhaite utiliser. Dans l’onglet « Validations Wizard », choisir le type de validation « Domain Name Validation »

Jeedom-https-startssl007

Puis il faut fournir le nom de domaine que l’on souhaite valider. Il s’agit pour le moment du domaine racine. (Ex : chezmoi.fr)

Jeedom-https-startssl008

Ensuite nous devons fournir un nom de sous-domaine. (Ex : jeedom.chezmoi.fr)

Jeedom-https-startssl009

Il est ensuite demandé de choisir une adresse mail qui servira à la validation. Normalement, celle que vous avez fourni à l’inscription devrait y être, sinon choisissez-en une qui va bien. Cette adresse mail doit être valide et vous devez y avoir accès car un code de validation va y être envoyé.

Jeedom-https-startssl010

Vous devez recevoir un code de validation sur l’email précédemment sélectionné, qu’il faut rentrer dans l’écran suivant.

Jeedom-https-startssl011

Jeedom-https-startssl012

c. Génération du certificat de confiance

Nous allons maintenant pouvoir générer notre certificat de confiance. Dans l’onglet « Certificates Wizard » sélectionner le type de certificat cible « Web Server SSL/TLS Certificate ».

Jeedom-https-startssl013

La première étape consiste à créer une clé privée qui servira à chiffrer les échanges. Elle sera protégée par un mot de passe afin de ne pas être utilisable par quelqu’un ne connaissant pas le mot de passe.

Dans le formulaire, saisir le mot de passe que vous voulez pour protéger la clé privée (Un mot de passe assez long et compliqué est recommandé) choisir la taille de la clé (Ici, pour avoir un sécurité correcte, nous choisirons 4096 bits).

Jeedom-https-startssl014

La clé privée est ensuite affichée dans un bloc texte. Elle commence par  « —–BEGIN RSA PRIVATE KEY—– » et finit par « —–END RSA PRIVATE KEY—– ». Copier tout le contenu (Y compris le —–BEGIN… et le —–END… dans un fichier texte (notepad ou autre, pas word) et sauvegarder ce fichier texte avec un nom jeedom.chezmoi.fr.key par exemple.

Ce fichier est très important et doit être sauvegardé et sécurisé comme le certificat client !

Il faut ensuite choisir le nom de domaine pour lequel on veut générer le certificat (Celui que l’on a validé précédemment).

Jeedom-https-startssl015

Un résumé de ce qui va être fait est affiché.

Jeedom-https-startssl016

Après avoir cliqué sur « Continue », il faudra patienter afin que le certificat soit généré. Un mail sur l’adresse fournie pour la validation du nom de domaine sera envoyé lorsque le certificat sera prêt.

Une fois ce mail reçu, aller dans l’onglet « Tool Box » de votre profil et choisir « Retrieve Certificate » dans le menu (Remarquer au passage la date de fin de validité du certificat).

Jeedom-https-startssl017

Après avoir cliqué sur « Continue » un bloc texte affiche le certificat. Copier tout le contenu (Y compris le —–BEGIN… et le —–END… dans un fichier texte (notepad ou autre, pas word) et sauvegarder ce fichier texte avec un nom jeedom.chezmoi.fr.crt par exemple.

Jeedom-https-startssl018

d. Installation du certificat de confiance

Maintenant nous allons mettre en place tout ça sur le serveur Jeedom. Connectez-vous en ssh sur le serveur Jeedom et créer un répertoire pour mettre les certificats :

$ sudo mkdir /etc/nginx/ssl

Copier les fichiers clés et certificats (jeedom.chezmoi.fr.key et jeedom.chezmoi.fr.crt) dans le dossier /etc/nginx/ssl à l’aide de WinScp (Windows) ou autre.

Ensuite nous allons décrypter et sécuriser le fichier qui contient la clé, car sinon nginx demandera le mot de passe de la clé à chaque démarrage :

$ /etc/nginx/ssl

$ sudo openssl rsa -in jeedom.chezmoi.fr.key -out jeedom.chezmoi.fr.key

$ sudo chmod 400 jeedom.chezmoi.fr.key

Puis nous allons ajouter à notre certificat les certificats de l’autorité de certification :

$ wget http://www.startssl.com/certs/ca.pem

$ wget http://www.startssl.com/certs/sub.class1.server.ca.pem

$ sudo bash -c « cat jeedom.chezmoi.fr.crt sub.class1.server.ca.pem ca.pem > /etc/nginx/ssl/ jeedom.chezmoi.fr -chained.crt »

Et enfin nous allons modifier le fichier de configuration de nginx (le serveur web) afin que le serveur Jeedom accepte les connexions en http et Https :

$ sudo vi /etc/nginx/sites-enabled/default

Ajouter les lignes suivantes, entre les lignes « server { »  et « root /usr/share/nginx/www ; » :

listen 80;

listen 443 ssl;

ssl_certificate /etc/nginx/ssl/ jeedom.chezmoi.fr.crt;

ssl_certificate_key /etc/nginx/ssl/ jeedom.chezmoi.fr.key;

ssl_session_timeout 5m;

Enfin on redémarre nginx :

$ sudo service nginx restart

C’est fini pour le certificat, il ne reste plus qu’à bien configurer votre nom de domaine chezmoi.fr et le sous-domaine jeedom.chezmoi.fr ainsi que la redirection de port sur votre box afin d’accéder à Jeedom de l’extérieur en Https.

Remarque : Avec cette configuration de nginx, Jeedom est toujours accessible en http normal.

Gestion du nom de domaine & redirection

Sur l’interface d’administration du site où vous avez achetez votre nom de domaine, vous devez pouvoir créer des entrées dns pour des sous-domaines de votre domaine principal. Il m’est impossible de documenter cela car cela dépend du site que vous avez choisi. Chez mon fournisseur, il faut aller dans l’interface d’administration sélectionner dans le menu « Hébergement : Entrées DNS » puis créer une nouvelle entrée de « Type A » avec comme nom le nom que vous voulez pour votre sous-domaine (Ex : jeedom) et comme valeur l’adresse IP publique de votre box internet. (Que l’on peut trouver en visitant des sites comme : www.mon-ip.com à partir de chez vous)

Pour la redirection de port sur votre box internet, là non plus je ne peux pas documenter car cela dépend de l’opérateur et de la box que vous avez ainsi que de la configuration de votre réseau local. Mais en gros il faut ouvrir le traffic entrant sur le port 443 vers le serveur Jeedom. C’est en général dans la section Redirection de port, choisir comme IP sources : Toutes, comme port source : 443, comme IP de destination : L’IP de votre serveur Jeedom sur le réseau local, comme port de destination : 443.

Remarque : Pour plus de sécurité, vous pouvez faire une redirection à partir d’un port non standard (supérieur à 1024 par exemple 5151). Il faut donc mettre en port source dans la redirection de la box 5151, et on accède donc à Jeedom de l’extérieur en saisissant l’adresse : https://jeedom.chezmoi.fr:5151/jeedom/index.php

Merci à 1110 de touteladomotique.com pour son tuto qui a servi de base à celui-ci.

Un grand merci à Sshafi, bêta testeur de JEEDOM, pour cet article.

Restez connecté sur l'actualité domotique!