Forum Programmation.c++ Manipulation d'un programme interactif en C++

Posté par  (site web personnel) .
Étiquettes : aucune
2
17
juin
2010
Bonjour,

pour un projet, je souhaite générer des certificats client SSL de manière un peu automatisé. Pour cela, je souhaite créer un petit programme en C++ (enfin dans un langage compilé pour pouvoir l'utiliser avec un SUID bit) qui contrôlerai openssl et se chargerai de répondre aux différentes questions qu'il peut poser lors de la génération.

Je me doute qu'il doit s'agir de redirection de flux, mais je ne dois pas être très doué car je n'arrive pas à trouver de documentation ou un exemple de programme en C++ qui contrôlerait un programme interactif comme peut l'être openssl.

Je recherche donc :
- soit un exemple de programme faisant cela,
- soit des documents pouvant m'orienter,
- soit simplement une liste de mots clé que je pourrai taper sur mon moteur de recherche afin de trouver mon bonheur

Si vous avez des idées à ce sujet, je suis preneur.
  • # Expect

    Posté par  . Évalué à 3.

    Ce que tu cherche c'est http://en.wikipedia.org/wiki/Expect . apparemment il est utilisable directement depuis c++.
    • [^] # Re: Expect

      Posté par  (site web personnel) . Évalué à 1.

      Effectivement ça semble correspondre à ce que je recherche. Merci beaucoup !
      • [^] # Re: Expect

        Posté par  (site web personnel) . Évalué à 1.

        Je viens de tester et cela correspond parfaitement à ce que je cherchais. Grâce à cela, en quelques ligne de C++, j'arrive à contrôler OpenSSL.

        Un grand merci
  • # Faire un tube

    Posté par  . Évalué à 3.

    Bonjour,

    L'idéal serait d'utiliser les bibliothèques d'OpenSSL directement, ton programme ne serait alors pas dépendant d'un changement d'affichage d'openssl (mais seulement d'un changement d'API). Ça fait un moment que je n'ai pas regardé openssl, mais "man 3 x509" doit pouvoir te renseigner (reste à trouver un exemple: les sources d'openssl?).

    Pour rediriger les flux, il faut que tu crée un tube (pipe) qui servira de tampon entre les E/S de tes 2 processus. "man pipe" te donnera un exemple complet.
    • [^] # Re: Faire un tube

      Posté par  . Évalué à 3.

      OpenSSL est très mal documenté, mais je suis d'accord qu'il vaut mieux faire appel directement à l'API d'OpenSSL.
      Cependant l'api X509 est incompréhensible si l'on a pas l'habitude de mettre la main dans le cambouis, à savoir aller regarder les entêtes des fichiers d'OpenSSL et rechercher toutes les fonctions contenant "X509" et d'essayer de comprendre à quoi elles servent...

      Par contre, il y a les même fonctionnalités dans GnuTLS, et l'api est très bien documenté.

      Donc, si j'ai une suggestion à faire ce serait d'utiliser GnuTLS pour générer tes certificats. Tu galèreras moins.
      • [^] # Re: Faire un tube

        Posté par  (site web personnel) . Évalué à 1.

        J'avais effectivement pensé à coder un programme qui utiliserai l'API d'OpenSSL, mais mon niveau n'étant pas super et le souvenir que j'ai de l'utilisation de l'API d'OpenSSL m'ont un peu découragé.

        Si je génère un certificat avec l'API de GnuTLS, celui-ci sera compatible avec OpenSSL ?
        • [^] # Re: Faire un tube

          Posté par  . Évalué à 2.

          Oui, à priori, vu que les certificats répondent à un standard, tu devrais pouvoir les utiliser quelque soit le logiciel. (c'est l'avantage par rapport à un format fermé)
      • [^] # Re: Faire un tube

        Posté par  (site web personnel) . Évalué à 1.

        OpenSSL is written by monkeys
        http://www.peereboom.us/assl/html/openssl.html

        pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

  • # Qt

    Posté par  . Évalué à 1.

    Il me semble que Qt4 permet ce genre de chose via la classe QProcess.
    • [^] # Re: Qt

      Posté par  (site web personnel) . Évalué à 2.

      L'utilisation de Qt pour faire un programme de ce genre me semble disproportionné. Surtout que c'est pour installer sur un serveur et que celui-ci ne possède pas les bibliothèques Qt.

      Je garde la solution sous le coude si je ne parviens pas à faire ce que je souhaite avec les autres propositions ci-dessus.
      • [^] # Re: Qt

        Posté par  (site web personnel) . Évalué à 2.

        Tu n'as qu'a installer Qt avec ton programme.
        Compile Qt en static avec ton programme au besoin.

        (Qt n'est pas si lourd, rapelle toi qu'il fonctionne sur des téléphones)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.