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.

Partagez cet article !

A propos de l'auteur

Passionné par les nouvelles technologies, et après plusieurs années à travailler dans l’industrie, j’ai eut la chance d’intégrer l’équipe Domadoo en 2008 en tant que Responsable Technique. Depuis 2009 je suis également Rédacteur en chef du Blog Domadoo. Toujours à l’affût de nouveaux produits qui pourront améliorer notre quotidien, j’aime partager mes trouvailles avec vous.

24 commentaires

  1. Désolé je suis un peu newb mais la ligne de commande : sudo bash -c « cat jeedom.chezmoi.fr.crt sub.class1.server.ca.pem ca.pem > /etc/nginx/ssl/ jeedom.chezmoi.fr -chained.crt »

    me retourne « cat: invalid option — ‘c' ».

    Est-ce que quelqu’un pourrait m’aider svp.

    Merci

    • Bonjour, pouvez-vous essayer cette commande:

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

  2. Bonjour,
    Est-ce que ce tuto reste valable avec jeedom 2.0 ?
    J’ai suivi la première méthode, avec le certificat auto-signé, mais je n’arrive plus à accéder à mon interface web en local (et toujours pas à distance). J’arrive pourtant à y accéder en SSH.
    Le premier souci est avec nginx (error 403).

  3. Bonjour,

    lorsque je redemarre Nginx , apres avoir modifié le fichier de config avec :

    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;

    j’ai un message d’erreur :Job for nginx.service failed. See ‘systemctl status nginx.service’ and ‘journalctl -xn’ for details.

    Systemctl statusnginx.service :
    nginx.service – A high performance web server and a reverse proxy server
    Loaded: loaded (/lib/systemd/system/nginx.service; enabled)
    Active: failed (Result: exit-code) since Wed 2016-03-02 01:01:16 MST; 36s ago
    Process: 8403 ExecStop=/sbin/start-stop-daemon –quiet –stop –retry QUIT/5 –pidfile /run/nginx.pid (code=exited, status=0/SUCCESS)
    Process: 7583 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 8406 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=1/FAILURE)
    Main PID: 7584 (code=exited, status=0/SUCCESS)

    cela vient des 3 lignes « ssl_certificate », puisque Nginx redemarre si je mets un # sur ces 3 lignes .

    avez vous une idee d’ou cela peut provenir ?

    Merci de votre aide

    • Il faut faire un sudo nginx -t pour tester les fichiers de conf et qu’il dise où se trouve l’erreur
      Souvent c’est une paranthèse, un ; ou autre oubli

    • bon j’ai testé:
      nginx: [emerg] invalid number of arguments in « ssl_certificate » directive in /etc/nginx/sites-enabled/default:8

      apres verif , j’avais laissé un espace sur ssl/_jeedom.chezmoi.fr.key;
      merci

  4. olivier degroote le

    bonjour,
    j’ai bien tapé : sudo bash -c « cat jeedom.chezmoi.fr.crt sub.class1.server.ca.pem ca.pem > /etc/nginx/ssl/ jeedom.chezmoi.fr.crt
    en remplaçant chezmoi ..
    et voici ce que ça me retourne :
    bash: /etc/nginx/ssl/: est un dossier

    svp un peu d’aide, je suis nul en linux 😉

    • il y a un espace entre ssl/ jeedom qu’il faut supprimer
      attention aux copier coller, il faut se relire et en profiter pour apprendre à quoi ca sert
      certains caractères par exemple sont souvent modifiés sur un copier-coller et ont des effets très dommageables (le – qui passe en double longueur)

  5. Bonjour,
    A l’étape:
    $ sudo bash -c « cat jeedom.chezmoi.fr.crt sub.class1.server.ca.pem ca.pem > /etc/nginx/ssl/ jeedom.chezmoi.fr -chained.crt »
    j’ai été obligé de lier (sans espace) : jeedom.chezmoi.fr-chained.crt sinon il me disait que le fichier d’entrée et sortie était le même. Cela m’a donc créé un second certificat jeedom.chezmoi.fr-chained.crt.

    A l’étape : sudo vi /etc/nginx/sites-enabled/default

    j’ai essayé d’écrire : ssl_certificate /etc/nginx/ssl/jeedom.chezmoi.fr.crt;

    et comme cela ne fonctionnait pas, j’ai fait un test avec : ssl_certificate /etc/nginx/ssl/jeedom.chezmoi.fr-chained.crt;

    sans plus de succès.

    L’erreur que je rencontre est à l’étape :

    sudo service nginx restart

    où j’ai le log suivant :

    root@Jeedom:~# sudo service nginx restart
    Job for nginx.service failed. See ‘systemctl status nginx.service’ and ‘journalc tl -xn’ for details.
    root@Jeedom:~# 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: failed (Result: exit-code) since lun. 2016-07-25 00:47:36 CEST; 33s a go
    Process: 4995 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=1/FAILURE)

    juil. 25 00:47:36 Jeedom nginx[4995]: nginx: [emerg] PEM_read_bio_X509_AUX(…E)
    juil. 25 00:47:36 Jeedom nginx[4995]: nginx: configuration file /etc/nginx/…ed
    juil. 25 00:47:36 Jeedom systemd[1]: nginx.service: control process exited,…=1
    juil. 25 00:47:36 Jeedom systemd[1]: Failed to start A high performance web…r.
    juil. 25 00:47:36 Jeedom systemd[1]: Unit nginx.service entered failed state.
    Hint: Some lines were ellipsized, use -l to show in full.
    root@Jeedom:~# journalctl -xn
    — Logs begin at lun. 2016-07-25 00:35:30 CEST, end at lun. 2016-07-25 00:50:43
    juil. 25 00:50:09 Jeedom minissdpd[393]: device not found for removing : uuid:9f
    juil. 25 00:50:10 Jeedom minissdpd[393]: device not found for removing : uuid:9f
    juil. 25 00:50:10 Jeedom minissdpd[393]: device not found for removing : uuid:b5
    juil. 25 00:50:10 Jeedom minissdpd[393]: device not found for removing : uuid:b5
    juil. 25 00:50:10 Jeedom minissdpd[393]: device not found for removing : uuid:b5
    juil. 25 00:50:25 Jeedom sudo[5946]: www-data : TTY=unknown ; PWD=/var/www ; USE
    juil. 25 00:50:25 Jeedom sudo[5946]: pam_unix(sudo:session): session opened for
    juil. 25 00:50:25 Jeedom sudo[5946]: pam_unix(sudo:session): session closed for
    juil. 25 00:50:42 Jeedom systemd[1]: Starting Cleanup of Temporary Directories..
    — Subject: L’unité (unit) systemd-tmpfiles-clean.service a commencé à démar rer
    — Defined-By: systemd
    — Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel

    — L’unité (unit) systemd-tmpfiles-clean.service a commencé à démarrer.
    juil. 25 00:50:43 Jeedom systemd[1]: Started Cleanup of Temporary Directories.
    — Subject: L’unité (unit) systemd-tmpfiles-clean.service a terminé son démar rag
    — Defined-By: systemd
    — Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel

    — L’unité (unit) systemd-tmpfiles-clean.service a terminé son démarrage, ave c l
    lines 1-21/21 (END)

    Je suis contraint de remettre le fichier nginx d’origine sinon jeedom n’est plus accessible.

    Une idée SVP ?

    Merci.

  6. Bonjour pourriez-vous faire une variante du tuto avec une installation sous apache, qui est aprioris installé sur les nouvelles images

  7. De rien Laurent, les monopoles ne sont jamais bons, on trouve partout la référence que vous citez, c’est bon aussi de citer https://mon-ip-addresse.com comme nouvelle référence très utile.

    Pour Emmanuel : en fait vous enregistrez un nom de domaine chez un hébergeur, il vous faut une adresse email c’est vrai mais pas liée au nom de domaine (yahoo ou gmail ou autre fera l’affaire), ensuite vous créez une adresse email qui correspond à votre nouveau domaine et qui selon le cas vous sert à forwarder ver une autre adresse que vous utilisez ou à utiliser réellement (voir la FAQ de l’hébergeur pour le paramétrage IMAP et SMTP).

  8. bonjour
    je me permets de te solliciter!
    quand je rentre la ligne de commande : sudo mkdir /etc/nginx/ssl
    root@jeedom:~# mkdir /etc/nginx/ssl
    j’ai impossible de creer le répertoire  » /etc/nginx/ssl »: aucun fichier ou dossier de ce type
    merci par avance de ton aide

Laisser une réponse