Certificat + Clé ET username+password

Bonjour à tous et surtout aux développeurs.

J’ai vu sur d’autres discussions que je ne suis pas le seul à me plaindre quant à l’utilisation de ce plugin.
Ils proposent la solution de facilité : remplacer le fichier template dans core/config par le fichier .ovpn généré par le server.
J’ai donc regardé vite fait le code et voilà les correctifs que j’ai apporté pour pouvoir utiliser le certificat/clé client ET un mot de passe à travers l’interface du plugin :
(cela nécessite toujours de diviser le .ovpn du server en plusieurs fichiers : ca.crt, client.crt et client.key)

dans core/class/openvpn.class.php à la ligne 234


    $replace['#authentification#'] = '';
    if (trim($this->getConfiguration('username')) != '' && trim($this->getConfiguration('password')) != '') {
      $replace['#authentification#'] .= 'auth-user-pass ' . jeedom::getTmpFolder('openvpn') . '/openvpn_auth_' . $this->getConfiguration('key') . '.conf' . "\n";
      file_put_contents(jeedom::getTmpFolder('openvpn') . '/openvpn_auth_' . $this->getConfiguration('key') . '.conf', trim($this->getConfiguration('username')) . "\n" . trim($this->getConfiguration('password')));
    }
      
    $replace['#authentification#'] .= 'cert ' . dirname(FILE) . '/../../data/cert_' . $this->getConfiguration('key') . '.crt' . "\n";
    $replace['#authentification#'] .= 'key ' . dirname(FILE) . '/../../data/key_' . $this->getConfiguration('key') . '.key';

dans le fichier descktop/js/openvpn.js : commenter les ligne 17 à 21:


/*$('.eqLogicAttr[data-l1key=configuration][data-l2key=auth_mode]').on('change',function(){
  $('.auth_mode').hide();
  $('.auth_mode.'+$(this).value()).show();
});
*/

et dans le fichier desktop/php/openvpn.php : commenter / supprimer le style de la div à la ligne 146


<div class="auth_mode password" style="/*display:none;*/">

(la liste déroulante auth_mode, juste au dessus, ne sert plus à rien…)

Si les développeurs peuvent faire la modifs en stable et/ou beta ça serait bien, je pense…
Merci à vous
J’espère que j’ai posté au bon endroit
Chris

Bonjour
Je suis pas sur de ta modification à mon avis si je fais ça je casse tous les dns des plusieurs dizaines de milliers d’utilisateurs car là tu as l’air de mettre le certificat dans la configuration quoiqu’il se passe.

Juste pour rappel ce plugin n’a jamais était pensé pour que vous l’utilisiez autrement qu’avec les dns jeedom et vu la criticité de ce plugin je suis vraiment très prudent sur la moindre modification

Bonsoir,
Merci de ta réponse.
Dans ce cas, il suffit d’ajouter une autre condition pour savoir si les .crt et .key clients sont existants ou pas tel que :


$replace['#authentification#'] = '';
    if (trim($this->getConfiguration('username')) != '' && trim($this->getConfiguration('password')) != '') {
      $replace['#authentification#'] .= 'auth-user-pass ' . jeedom::getTmpFolder('openvpn') . '/openvpn_auth_' . $this->getConfiguration('key') . '.conf' . "\n";
      file_put_contents(jeedom::getTmpFolder('openvpn') . '/openvpn_auth_' . $this->getConfiguration('key') . '.conf', trim($this->getConfiguration('username')) . "\n" . trim($this->getConfiguration('password')));
    }
        if (file_exists(dirname(__FILE__) . '/../../data/cert_' . $this->getConfiguration('key') . '.crt') && file_exists(dirname(__FILE__) . '/../../data/cert_' . $this->getConfiguration('key') . '.key')){
          $replace['#authentification#'] .= 'cert ' . dirname(__FILE__) . '/../../data/cert_' . $this->getConfiguration('key') . '.crt' . "\n";
          $replace['#authentification#'] .= 'key ' . dirname(__FILE__) . '/../../data/key_' . $this->getConfiguration('key') . '.key';
        }

Un beta testeur de la communauté disposant des DNS Jeedom pourrait peut être tester …
Peut être qu’une mise en forme de l’interface avec des checkbox pourrait être envisagées

Bonjour
Tu peux faire un pr si tu veux ça sera plus simple pour moi de voir les modifications et de les valider ou non

Bonjour,
J’ai fais la pull request en ajoutant aussi un bouton pour rafraîchir manuellement et un affichage de l’ip (ipv4 et ipv6) dépendant de la commande shell ip.
Pour l’ip il faudra vérifier si c’est compatible avec toutes les plateformes…