IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Sécurité Discussion :

OpenVPN : initialisation client automatisée


Sujet :

Sécurité

  1. #1
    Membre du Club
    Homme Profil pro
    DevC++Media
    Inscrit en
    Juin 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : DevC++Media
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 71
    Points : 55
    Points
    55
    Par défaut OpenVPN : initialisation client automatisée
    Bonjour tout le monde,

    J'ai créé mon petit réseau VPN (OpenVPN, multiclient-1server).

    Je me demande s'il est possible de créer de nouveaux clients (Génération key+crt) via un shell.
    et comment ?

    Concrètement, mes clients sont des raspBerries PI B,
    J'envisage de créer une interface d' initialisation.
    Quand un membre recoit son rasp, il lance un site du serveur 'http://init.monserveurhoho.com', un gros boutton "init",
    et "bim" il pourra rejoindre le VPN une minute plus tard - et pour toujours - car il a download automatiquement ses éléments (ca.crt, key, crt et config).
    Tout ça sans console.
    Comme pour - exemple détestable d Apple - la génération des certifs device & co.

    Côté sécurité, j'imagine que c est moyen. Mais on envisage de builder beaucoup de rasp's
    et je ne me voie pas passer une semaine à la console à cracher des clefs pour chacun...

    D avance un gros merci pour tout éclairage !

  2. #2
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par Hyt3k Voir le message
    Je me demande s'il est possible de créer de nouveaux clients (Génération key+crt) via un shell.
    et comment ?
    oui c'est possible, si tu regardes les scripts dans le répertoire easy-rsa c'est quasiment tous des scripts bash si je me souviens bien, suffit de décortiquer, je l'ai fait à une époque avec succès en tous cas

  3. #3
    Membre du Club
    Homme Profil pro
    DevC++Media
    Inscrit en
    Juin 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : DevC++Media
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 71
    Points : 55
    Points
    55
    Par défaut
    Ah oui... en effet...


    merki

  4. #4
    Membre du Club
    Homme Profil pro
    DevC++Media
    Inscrit en
    Juin 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : DevC++Media
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 71
    Points : 55
    Points
    55
    Par défaut
    Arf, je me disais... j y avais bien pensé.
    Sauf que build-key d'Easy RSA contient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
               Fichier*: build-key.autodelire                                                                                          
     
    #!/bin/sh
     
    # Make a certificate/private key pair using a locally generated
    # root certificate.
     
    export EASY_RSA="${EASY_RSA:-.}"
    "$EASY_RSA/pkitool" --interact $*
    je me trompe peut être mais il n y a pas grand chose à customiser.
    Regardons dans pkitool : c est plus fourni.
    Bon étudions le truc...

  5. #5
    Membre du Club
    Homme Profil pro
    DevC++Media
    Inscrit en
    Juin 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : DevC++Media
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 71
    Points : 55
    Points
    55
    Par défaut
    Okidoki... ja vais me mettre au python alors...
    Mais @BufferBob si tu as un conseil sur la modif, je suis preneur.

  6. #6
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par Hyt3k Voir le message
    Okidoki... ja vais me mettre au python alors...
    hum... si ton plitool ressemble à ça c'est du shell hein, pas du python ^^

    Mais @BufferBob si tu as un conseil sur la modif, je suis preneur.
    pas vraiment ça fait longtemps que j'ai plus mis le nez dans openvpn... pour le moins il suffit de modifier le fichier vars qui exporte tout un tas de variables nécessaires à la génération des certificats

    donc après suffit plus ou moins de se référer à la doc, on distingue au minimum 3 opérations; une pour créer le vpn, les certificats serveur, initialiser la CA etc. une autre pour créer un certificat client qui expire dans 1800 ans, et une dernière pour révoquer un certificat client
    la doc est limpide à ce sujet, étape 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    cd /toto/coincoin/easy-rsa/
    source ./vars
    ./clean-all
    ./build-ca
    ./build-key-server server
    étape 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cd /toto/coincoin/easy-rsa/
    source ./vars
    ./build-key client
    étape 3 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cd /toto/coincoin/easy-rsa/
    source ./vars
    ./revoke-full client
    donc on comprend assez vite qu'il va falloir aller fouiller les scripts clean-all, build-ca, build-key-server, build-key et revoke-full et -ô magie- chacun est un script shell d'à peine 10 lignes qui fait appel à pkitool derrière, lequel fait un peu sa tambouille interne (au niveau de l'arborescence et des variables d'environnement essentiellement) et finit invariablement par faire appel à openssl

  7. #7
    Membre du Club
    Homme Profil pro
    DevC++Media
    Inscrit en
    Juin 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : DevC++Media
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 71
    Points : 55
    Points
    55
    Par défaut
    Merci
    Citation Envoyé par BufferBob Voir le message
    hum... si ton plitool ressemble à ça c'est du shell hein, pas du python ^^
    hum, oui en effet.

    Je pense que modifier pkitool, de build-key devrait suffire dans les premiers temps.
    D ailleurs build-key ne contient que l include de pkitool...

    pour info : Un script qui bundle le tout (conf, key, crt) dans un tarball : http://serverfault.com/questions/172...key-automation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #build-key (copy)
    #!/bin/sh
     
    # Make a certificate/private key pair using a locally generated
    # root certificate.
     
    export EASY_RSA="${EASY_RSA:-.}"
    "$EASY_RSA/pkitool" --interact $*


    pkitool has a --batch flag (enabled by default) which generates
    keys/certs without needing any interactive input. pkitool
    can still generate certs/keys using interactive prompting by
    using the --interact flag. [ src : https://openvpn.net/archive/openvpn-.../msg00158.html ]
    Résolution :
    /// Scripts
    On crée une version custom. du script easy-rsa/build-key :
    on duplique build-key => build-key.moncustom
    on modifie build-key.autodelire car il appelle pkitool ; on va simplement supprimer l’option —interact de pkitool (cf Annexe 7 s/ PkiTool). C’est cette option qui prompte l’utilisateur.
    on crée un script qui appellera, dans l’ordre :

    $ cd /etc/openvpn/easy-rsa
    $ source ./vars
    $ ./build-key.moncustom nomClientAChanger
    : important pour loader les paramètres par défaut de la clé. (NB : vars à modifier le cas échéant)

  8. #8
    Membre du Club
    Homme Profil pro
    DevC++Media
    Inscrit en
    Juin 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : DevC++Media
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 71
    Points : 55
    Points
    55
    Par défaut
    Yep... J ai buildé un petit Php pour tester (j ai simplement supprimé --interact dand build-key, ce qui supprime les prompts terminal) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     <?php
                  if(!isset($_GET['nomclient']) ) {
                       echo ("manque :  nom client<p>Dans l'url, "
                            ."renseigner :  ?nomclient='monnom'"
                            ."<p>exemple : www.example.com/vpn_auth/?nomclient=monnom</p>");
                  }
                  elseif( strlen($_GET['nomclient'])>8 ) {
                       echo (" nom client torp long : max 8 caractères");
                  }
                  else {
                    // --- FORMATTAGE NOM CLIENT ---
                        $nomClient = "testauto_"."client_".addslashes(  trim ( $_GET['nomclient'] ) );
                        echo 'nomclient ='.$nomClient."<br/>";
     
     
                    // --- GENERATION DES CLEFS ---
     
                        $output1 = shell_exec('source /etc/openvpn/easy-rsa/vars') ;
                        echo "generating : ".'/etc/openvpn/easy-rsa/build-key.autodelire '.  $nomClient . "... ";
                        $output2 = shell_exec('/etc/openvpn/easy-rsa/build-key.autodelire '.  $nomClient ) ;
     
                        echo 'generation done.<br/>'.'> source vars: '.$output1.'<br/>> build-key: '.$output2."<br/>";
     
     
                   // --- ZIP DU PACKAGE A REMETTRE AU CLIENT ---
                        echo "zipping... ";
                        $outputtar = shell_exec('tar cf '.  $nomClient  .'.tar /etc/openvpn/easy-rsa/keys/'.  $nomClient  .'* ');//tar cf client_bluebox.tar /etc/openvpn/easy-rsa/keys/client_bluebox*
                        echo 'zip done. '. $outputtar;
     
                        //render .tar :
                        echo json_encode( array( 'result'=>'ok', 'path'=>'todo' ) );
                  }
          ?>
    Question sécurité, c'est une autoroute je pense.
    En tous les cas, la ligne suivante n exécute rien (bien qu elle soit fonctionnelle en root SSH) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $output2 = shell_exec('/etc/openvpn/easy-rsa/build-key.autodelire '.  $nomClient ) ;
    rendu : Nom : aaa.png
Affichages : 285
Taille : 75,7 Ko

Discussions similaires

  1. OpenVpn Prob' client XP
    Par PoP_NicoW dans le forum Réseau
    Réponses: 0
    Dernier message: 11/03/2010, 11h51
  2. Openvpn client VISTA=> OVH DEBIAN
    Par nitrogen_13 dans le forum Debian
    Réponses: 2
    Dernier message: 29/09/2009, 09h48
  3. Réponses: 2
    Dernier message: 05/09/2008, 16h59
  4. Warning avec client openVPN windows
    Par illmonkey dans le forum Sécurité
    Réponses: 2
    Dernier message: 21/09/2006, 13h34
  5. [RCP] Initialisation Spring Client Riche
    Par tatemilio2 dans le forum Spring
    Réponses: 1
    Dernier message: 19/09/2006, 08h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo