Tuto : Gestion du renouvellement d'un certificat Let's Encrypt via scenario Jeedom

Bonsoir @ngrataloup ,
Merci pour ce tuto que je souhaite mettre en place.
J’ai plusieurs questions:
1/ Plutôt que d’afficher l’information dans un virtuel, j’aimerai alimenter le panneau de notification ou encore envoyer un sms via le plugin SMS.
Comment l’intégrer ?

2/ J’ai plusieurs nom de domaine que je tape sous ssh avec des -d entre chaque.
Puis-je les mettre tel-quel dans la valeur du tag ?
-d XX1.synology.me -d XX2.momotte.synology.me -d XX3.momotte.synology.me -d XX4.momotte.synology.me

3/ Quand je fais le renouvellement je tape
sudo /etc/certbot-auto --apache -d XX1.synology.me -d XX2.momotte.synology.me -d XX3.momotte.synology.me -d XX4.momotte.synology.me

Dois-je l’adapter dans le code ?
Merci pour ton aide.
Mathieu

Bonsoir @OUARZA

Je pense que tu peux mettre dans les tag cmdNotifOK et cmdNotifErreur n’importe quelle commande de type message. A tester.
Si tu veux quelquechose dans le centre de notif. Faudra peut-etre rajouter une ligne de code à chaque vfois que tu vois $cmdNotfErreur ou $cmdNotifOK

Non, ca ne foncitonnera pas, je pense. Faudra adapter à ta commande à chaque fois que tu à un shell_exec

Oui, à coup sur, mon tuto n’a pas été fait pour renouveller plusieurs nom de domaines en meme temps.
Autre solution, faire un scenario / nom de domaine

Norbert

1 « J'aime »

Merci @ngrataloup pour tes réponses.
1/ Non, puisque c’est une commande info dans le tag alors que pour les SMS c’est une commande action si je ne me trompe pas.

2/ Ok, ça marche

3/ Je voulais souligner la différence surtout entre le sudo certbot certificates --cert-name de ton scénario et sudo /etc/certbot-auto --apache de ma commande.

Mathieu

Désolé, je ne connais pas le plugin SMS. Donc si c’est une commande action, il faut effectivement modifier le script

Si cette commande fonctionne chez toi aujourd’hui, tu peux continuer à l’utiliser sans souci un adaptant le script

Je suis pas assez fort pour ça :smiley:

1 « J'aime »

Bonjour

J’ai mis en place ce scenario (merci pour le travail…), mais je ne comprends pas bien la notion de notification avec Jeedomconnect

Pouvez-vous m’expliquer cela en détail, surtout la partie VALEUR ?

Merci beaucoup

Thierry

Bonjour Thierry,

1ere question : As tu le #plugin-jeedomconnect ?

Norbert

RE

Oui, bien sur. Je debute avec.

Thierry

Du coup, dans ton équipement JC, onglet notification, tu à le nom de commande de ta notification JC, qu’il faut renseigner dans le scénario pour être notifié sur ton tel en cas de besoin de renouvellement du certif.

Norbert

1 « J'aime »

J’ai bien la commande dans NOTIFICATION

Mais je ne la retrouve pas dans le scenario

Merci

Thierry

Il faut l’écrire à la main, sans les #
Norbert

Le script fonctionne mais je ne recois rien comme message

Pourtant , lorsque je teste la commande NOTIFICATION depuis jeedomconnect, je recois bien un message de test

Thierry

Tu parles de la commande notification qui est ok, mais tu as paramétrée une commande notification_ok.
Cette commande de notif est bien créée ?
Qu’est ce qui te fait dire que ça ne marche pas ? Attention, tu ne reçois pas systématiquement une notif. Si ton certif est ok, pas de notif.

Norbert

La commande NOK est bien crée

Je pensais recevoir un message quel que soit le retour OK ou NOK

Pourquoi, il y a 2 commandes dans le scenario ?

Merci

Thierry

Notif_ok → lorsque le renouvellement a été effectué automatiquement et avec succès
Notif_ko → lorsque le renouvellement est en échec
Pas de notif → lorsqu’il n’y a pas de renouvellement à effectuer soit entre 90j et le renewDate

Norbert

Ok. J’ai compris

Il me reste plus qu’a régler le problème du port 80. Il faut que je me penche sur le tuto

Merci

Thierry

Si tu es chez OVH, j’ai mis un Addon au tuto pour s’en passer :

Norbert

Hello,
J’ai cherché et j’ai trouvé des éléments de réponse.
J’ai adapté le scénario avec mes commandes.
Pour renouveler une liste de nom de domaine, il faut intégrer la commande « -d » et noter les différents domaines avec des virgules:

XX1.synology.me,XX2.XXXX.synology.me,XX3.XXXX.synology.me,XX4.XXXX.synology.me
$tags=$scenario->getTags(); // récupération des tag du scénario
$domaine=$tags['#domaine#'];
$alerte=$tags['#expirationAlerte#'];
$renewAuto =$tags['#renewAuto#'];
$renewDate =$tags['#renewDate#'];
//$cmdNotifOK = cmd::byString('#'.$tags['#cmdNotifOK#'].'#');
//$cmdNotifErreur = cmd::byString('#'.$tags['#cmdNotifErreur#'].'#');

// Execution de commandes SSH pour determination de la date de renouvellement
$expirationDate = date("d/m/Y",strtotime(str_replace(CHR(10),"",shell_exec ("sudo /etc/certbot-auto certificates --apache -d ".$domaine." | grep 'Expiry Date'| awk '{print $3}'"))));
$expirationDay = str_replace(CHR(10),"",shell_exec ("sudo /etc/certbot-auto certificates --apache -d ".$domaine." | grep 'Expiry Date'| awk '{print $6}'"));


if ( $expirationDay <= $alerte || is_numeric($expirationDay) == 0 ) {
  $msgErreur = 'Erreur de renouvellement du certificat pour le domaine '.$domaine.', Pas de date d\'expiration ou date d\'expiration inferieure à '.$alerte.'<br>verifier la commande ci-dessous en ssh<br>sudo /etc/certbot-auto certificates --apache -d '.$domaine ;
  $scenario->setlog($msgErreur);
//  $cmdNotifErreur->execCmd($options = array('title' => 'title=Erreur renouvellement du certificat', 'message' => $msgErreur , $cache   = 0));
  message::add("Renouvellement certificat", 'Message: '.$msgErreur);
}
else {
  if ( $renewAuto == 1 ) {
    if ( $expirationDay <= $renewDate ) {
      // Renouvellement auto si necessaire
  	  $statutRenew = shell_exec ("sudo /etc/certbot-auto renew --apache -d ".$domaine." | grep -c 'Congratulations, all renewals succeeded'");
  	  if ( $statutRenew == 1 ) { 
        $expirationDate = date("d/m/Y",strtotime(str_replace(CHR(10),"",shell_exec ("sudo /etc/certbot-auto certificates --apache -d ".$domaine." | grep 'Expiry Date'| awk '{print $3}'"))));
        $expirationDay = str_replace(CHR(10),"",shell_exec ("sudo /etc/certbot-auto certificates --apache -d ".$domaine." | grep 'Expiry Date'| awk '{print $6}'"));
        $msgOK='Renouvellement du certificat pour le domaine '.$domaine.', nouvelle expiration dans '.$expirationDay.' jours ('.$expirationDate.')';
        $scenario->setlog($msgOK);
//        $cmdNotifOK->execCmd($options = array('title' => 'title=Renouvellement du certificat', 'message' => $msgOK , $cache   = 0));
        message::add("Renouvellement certificat", 'Message: '.$msgOK);
      }
  	  else {
        $msgErreur = 'Erreur de renouvellement du certificat pour le domaine '.$domaine.', expiration dans '.$expirationDay.' jours ('.$expirationDate.')<br>Essayer la commande ci-dessous en SSH<br>sudo /etc/certbot-auto renew --apache -d '.$domaine;
        $scenario->setlog($msgErreur);
//        $cmdNotifErreur->execCmd($options = array('title' => 'title=Erreur renouvellement du certificat', 'message' => $msgErreur , $cache   = 0));
        message::add("Renouvellement certificat", 'Message: '.$msgErreur);
      }
    }
    else $scenario->setlog('Aucun renouvellement de certificat à réaliser pour le domaine '.$domaine.', expiration dans '.$expirationDay.' jours ('.$expirationDate.')');
  }
  else {
    $scenario->setlog('Renouvellement automatique desactivé pour le domaine '.$domaine.', Expiration dans '.$expirationDay.' jours ('.$expirationDate.')') ;
    if ( $expirationDay <= $renewDate ) {
      $msgRenew = 'Renouvellement nécessaire du certificat pour le domaine '.$domaine.', Expiration dans '.$expirationDay.' jours ('.$expirationDate.')' ;
      $scenario->setlog($msgRenew) ;
//      $cmdNotifErreur->execCmd($options = array('title' => 'title=renouvellement nécessaire du certificat', 'message' => $msgRenew , $cache   = 0));
      message::add("Renouvellement certificat", 'Message: '.$msgErreur);
    }
  }
}
 

Il me reste plus qu’à gérer les notifications :slight_smile:

Mathieu

1 « J'aime »

Par contre, si tu mets plusieurs domaines, qu’est ce qui est renvoyé dans $expirationDate et $expirationDay ?
Ca doit mettre un peu le souk dans le reste du scenario . non ?

Non, j’ai qu’une seule et même information « Expiration dans 86 jours (17/05/2023) »