Jeedom letsencrypt : Différence entre versions

De SLM - MediaWiki
 
(19 révisions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
==Installation de Letsencrypt==
+
[[Domotique|Retour]]
Voici les commandes à lancer pour installer letsencrypt avant la génération :
+
==Générer des certificats valide à l'aide de let's encrypt==
<nowiki>apt-get install -y git
+
Les certificat ssl Lets encrypt seront généré et géré par OPNSense [[OPNSense_os-acme-client|à cette étape]]
cd /opt
 
git clone https://github.com/letsencrypt/letsencrypt
 
cd letsencrypt
 
./letsencrypt-auto --help</nowiki>
 
  
Pour faire une demande de certificat vous devez posséder un nom de domaine pour lequel il sera généré.
+
==Récupérer les certificat Let's encrypt généré par opnsense==
 +
===Principe:===
 +
L'idée est de pouvoir se connecter sur le site jeedom.slemoal.fr en restant local et en bénéficiant du certificat ssl Lets encrypt généré et géré par OPNSense [[OPNSense_os-acme-client|à cette étape]]
  
==Configuration d’Apache==
+
===Redirection DNS===
Pour que le processus de letsEncrypt se termine correctement, il est nécessaire d’effectuer les trois étapes ci-dessous au préalable :
+
Se connecter sur OPNSense
  
Attention il est nécessaire d’ouvrir le port 80 sur le routeur (FAI) !
+
''Services: Unbound DNS: Contournements''
  
Activer le module SSL d’apache de la box Jeedom.
+
[[Fichier:opnsense_contournement_dns.png]]
  
Activer le VirtualHost HTTPS d’apache de la box Jeedom .
+
{{Rouge|ATTENTION}} Sur votre ordinateur le serveur DNS doit être opnsense
  
Configurer un portForwarding des requêtes HTTPS sur votre Box internet pour les rediriger vers votre Box Jeedom.
+
===Créer une clé public sur Jeedom===
 +
Nous allons créer un compte avec un certificat, afin de permettre au serveur Centreon de se connecter à opnsense en ssh sans mot de passe
  
===Activation du virtualHost et du module SSL===
+
si ça n'est pas dejà fait, nous allons créer une clé pour l'utilisateur root
Note
+
ssh-keygen -t rsa -b 2048 -C root
  
Se connecter en SSH sur la box Jeedom.
+
ne renseigner pas de passphrase
  
  <nowiki>a2enmod ssl
+
Copier le contenue de la clé public
a2ensite default-ssl.conf
+
  cat /root/.ssh/id_rsa.pub
service apache2 restart</nowiki>
 
Note
 
  
Aucun certificat ne sera délivré par LetsEncrypt tant que votre site en HTTPS ne sera pas joignable de l’extérieur.
 
  
/opt/letsencrypt/letsencrypt-auto --apache --email slemoal51@gmail.com -d jeedom.slemoal.fr
+
===Créer un compte sur OPNSense===
  
Note
+
''Système: Accès: Utilisateurs''
  
Si vous utilisez la méthode de renouvellement automatique ci-dessous, vous pouvez désactiver le virtualHost default-ssl.conf avec la commande a2dissite default-ssl.conf Pensez à reporter le code par défaut ci-dessous dans le virtualHost créé par le script de renouvellement : /etc/apache2/sites-available/000-default-le-ssl.conf`
+
Renseigner:
 +
*Nom d'utilisateur: jeedom
 +
*Cocher: Générer un mot de passe aléatoire
 +
*Shell de connexion: /bin/sh
 +
*Membre du groupe: admins
 +
*Clés autorisées: coller la clé public créer precedement (Exemple: ssh-rsa AAAAB3NzaC1yc... ...XOQKm/x root)
  
<nowiki><FilesMatch "\.(cgi|shtml|phtml|php)$">
+
Sauvegarder
  SSLOptions +StdEnvVars
 
</FilesMatch>
 
<Directory /usr/lib/cgi-bin>
 
  SSLOptions +StdEnvVars
 
</Directory>
 
</VirtualHost></nowiki>
 
  
==Configuration de Nginx==
+
===Tester la connection en ssh depuis le serveur jeedom===
Cette commande n’est à utiliser que si vous disposez d’un serveur web Nginx.
+
ssh jeedom@10.10.10.1 -p 8022
  
  ./letsencrypt-auto certonly --email slemoal51@gmail.com -d jeedom.slemoal.fr -a webroot --webroot-path /usr/share/nginx/www/
+
  ECDSA key fingerprint is SHA256:SoX8QCm... ...6CRPJMI.
Vous devez remplacer le chemin vers la racine du serveur. Vous devez ajouter les deux lignes de configuration du HTTPS dans la configuration nginx :
+
Are you sure you want to continue connecting (yes/no)? yes
  
nano /etc/nginx/sites-enabled/default
+
Si il ne demande pas de mot de passe, c'est gagné.
Ajouter les lignes suivantes, entre les lignes server { et root /usr/share/nginx/www ; :
 
  
<nowiki>listen 80;
+
===Modifier le fichier de conf apache===
  
listen 443 ssl;
+
Modifier l'emplacement des certificat et clé dans le fichier apache
 +
cat /etc/apache2/sites-enabled/000-default-le-ssl.conf
  
ssl_certificate /etc/nginx/ssl/ jeedom.chezmoi.fr.crt;
+
Dans notre cas le fichier sera:
 +
<nowiki><IfModule mod_ssl.c>
 +
<VirtualHost *:443>
 +
        ServerAdmin webmaster@localhost
 +
        DocumentRoot /var/www/html
 +
        ErrorLog /var/www/html/log/http.error
  
ssl_certificate_key /etc/nginx/ssl/ jeedom.chezmoi.fr.key;
 
  
ssl_session_timeout 5m;</nowiki>
+
ServerName jeedom.slemoal.fr
 +
  SSLCertificateFile /etc/ssl/certs/jeedom.slemoal.fr.cer
 +
  SSLCertificateKeyFile /etc/ssl/private/jeedom.slemoal.fr.key
 +
</VirtualHost>
 +
</IfModule></nowiki>
  
Et enfin redémarrez le serveur Nginx.
+
===Créer un cron sur le serveur jeedom===
service nginx restart
 
  
==Renouvellement==
+
  crontab -e
Le renouvellement se fait avec la commande :
 
 
 
/opt/letsencrypt/letsencrypt-auto --apache --renew-by-default -d jeedom.slemoal.fr
 
 
 
Vous recevez un mail automatiquement à l’arrivée de l’échéance du certificat qui vous rappellera de lancer cette commande.
 
 
 
===Méthode automatique===
 
C’est quand même mieux quand c’est automatique. Pour ce faire, voici les étapes à suivre :
 
 
 
Installez bc, utilisé dans le script le-renew :
 
apt-get install -y bc
 
 
 
Créez un fichier pour y écrire le script (son emplacement est libre) :
 
  nano /bin/certletsencryptrenew.sh
 
 
 
Saisissez les lignes ci-dessous dans le fichier créé précédemment. L
 
  
Ce script vérifie l’expiration du certificat et le renouvelle automatiquement si la date d’expiration est à moins de 30 jours.
+
  <nowiki>0 5 * * 1 scp -P 8022 jeedom@10.10.10.1:/var/etc/acme-client/home/jeedom.slemoal.fr/jeedom.slemoal.fr.cer /etc/ssl/certs/
  <nowiki>curl -L -o /usr/local/sbin/le-renew http://do.co/le-renew
+
0 5 * * 1 scp -P 8022 jeedom@10.10.10.1:/var/etc/acme-client/home/jeedom.slemoal.fr/jeedom.slemoal.fr.key /etc/ssl/private/
chmod +x /usr/local/sbin/le-renew
+
0 5 * * 1 service apache2 restart</nowiki>
le-renew jeedom.slemoal.fr</nowiki>
 
  
Editez le crontab.
 
crontab -e
 
  
On ajoute la ligne suivante :
+
[[Catégorie:Jeedom]]
0 5 * * 1 /bin/certletsencryptrenew.sh
 

Version actuelle datée du 8 avril 2020 à 19:32

Retour

Générer des certificats valide à l'aide de let's encrypt

Les certificat ssl Lets encrypt seront généré et géré par OPNSense à cette étape

Récupérer les certificat Let's encrypt généré par opnsense

Principe:

L'idée est de pouvoir se connecter sur le site jeedom.slemoal.fr en restant local et en bénéficiant du certificat ssl Lets encrypt généré et géré par OPNSense à cette étape

Redirection DNS

Se connecter sur OPNSense

Services: Unbound DNS: Contournements

Opnsense contournement dns.png

ATTENTION Sur votre ordinateur le serveur DNS doit être opnsense

Créer une clé public sur Jeedom

Nous allons créer un compte avec un certificat, afin de permettre au serveur Centreon de se connecter à opnsense en ssh sans mot de passe

si ça n'est pas dejà fait, nous allons créer une clé pour l'utilisateur root

ssh-keygen -t rsa -b 2048 -C root

ne renseigner pas de passphrase

Copier le contenue de la clé public

cat /root/.ssh/id_rsa.pub


Créer un compte sur OPNSense

Système: Accès: Utilisateurs

Renseigner:

  • Nom d'utilisateur: jeedom
  • Cocher: Générer un mot de passe aléatoire
  • Shell de connexion: /bin/sh
  • Membre du groupe: admins
  • Clés autorisées: coller la clé public créer precedement (Exemple: ssh-rsa AAAAB3NzaC1yc... ...XOQKm/x root)

Sauvegarder

Tester la connection en ssh depuis le serveur jeedom

ssh jeedom@10.10.10.1 -p 8022
ECDSA key fingerprint is SHA256:SoX8QCm... ...6CRPJMI.
Are you sure you want to continue connecting (yes/no)? yes

Si il ne demande pas de mot de passe, c'est gagné.

Modifier le fichier de conf apache

Modifier l'emplacement des certificat et clé dans le fichier apache

cat /etc/apache2/sites-enabled/000-default-le-ssl.conf

Dans notre cas le fichier sera:

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        ErrorLog /var/www/html/log/http.error


ServerName jeedom.slemoal.fr
  SSLCertificateFile /etc/ssl/certs/jeedom.slemoal.fr.cer
  SSLCertificateKeyFile /etc/ssl/private/jeedom.slemoal.fr.key
</VirtualHost>
</IfModule>

Créer un cron sur le serveur jeedom

crontab -e
0 5 * * 1 scp -P 8022 jeedom@10.10.10.1:/var/etc/acme-client/home/jeedom.slemoal.fr/jeedom.slemoal.fr.cer /etc/ssl/certs/
0 5 * * 1 scp -P 8022 jeedom@10.10.10.1:/var/etc/acme-client/home/jeedom.slemoal.fr/jeedom.slemoal.fr.key /etc/ssl/private/
0 5 * * 1 service apache2 restart