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 :

Utilisation de l'api openssl en C pour etablir la connexion securisee avec un serveur


Sujet :

Sécurité

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2016
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Haïti

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2016
    Messages : 29
    Points : 36
    Points
    36
    Par défaut Utilisation de l'api openssl en C pour etablir la connexion securisee avec un serveur
    Bonjour a tous, j'essaie d'etablir une connexion securisee avec un serveur.
    le serveur que j'ai implemente utilise SSLv3.
    j'utilise l'api openssl pour ecrire mon programme client mais j'ai des tas d'erreurs du style: "undefined reference to ..."
    voici mon code :
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    
    
    #include <stdio.h>
    #include <memory.h>
    #include <errno.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <netdb.h>
    
    #include <openssl/crypto.h>
    #include <openssl/x509.h>
    #include <openssl/pem.h>
    #include <openssl/ssl.h>
    #include <openssl/err.h>
    #include <unistd.h>
    
    #define CHK_NULL(x) if ((x)==NULL) exit (1)
    #define CHK_ERR(err,s) if ((err)==-1) { perror(s); exit(1); }
    #define CHK_SSL(err) if ((err)==-1) { ERR_print_errors_fp(stderr); exit(2); }
    
    int main ()
    {
    
    
      int err;
      int sd;
      struct sockaddr_in sa;
      SSL_CTX* ctx;
      SSL*     ssl;
      X509*    server_cert;
      char*    str;
      char     buf [4096];
      
    
      SSLeay_add_ssl_algorithms();
      
      SSL_load_error_strings();
      ctx = SSL_CTX_new( SSLv3_client_method());                      CHK_NULL(ctx);
    
      CHK_SSL(err);
      
      /* ----------------------------------------------- */
      /* Create a socket and connect to server using normal socket calls. */
      
      sd = socket (AF_INET, SOCK_STREAM, 0);       CHK_ERR(sd, "socket");
     
      memset (&sa, '\0', sizeof(sa));
      sa.sin_family      = AF_INET;
      sa.sin_addr.s_addr = inet_addr ("127.0.0.1");   /* Server IP */
      sa.sin_port        = htons     (1111);          /* Server Port number */
      
      err = connect(sd, (struct sockaddr*) &sa,
    		sizeof(sa));                   CHK_ERR(err, "connect");
    
      /* ----------------------------------------------- */
      /* Now we have TCP conncetion. Start SSL negotiation. */
      
      ssl = SSL_new (ctx);                         CHK_NULL(ssl);    
      SSL_set_fd (ssl, sd);
      err = SSL_connect (ssl);                     CHK_SSL(err);
        
      /* Following two steps are optional and not required for
         data exchange to be successful. */
      
      /* Get the cipher - opt */
    
      printf ("SSL connection using %s\n", SSL_get_cipher (ssl));
      
      /* Get server's certificate (note: beware of dynamic allocation) - opt */
    
      server_cert = SSL_get_peer_certificate (ssl);       CHK_NULL(server_cert);
      printf ("Server certificate:\n");
      
      str = X509_NAME_oneline (X509_get_subject_name (server_cert),0,0);
      CHK_NULL(str);
      printf ("\t subject: %s\n", str);
      OPENSSL_free (str);
    
      str = X509_NAME_oneline (X509_get_issuer_name  (server_cert),0,0);
      CHK_NULL(str);
      printf ("\t issuer: %s\n", str);
      OPENSSL_free (str);
    
      /* We could do all sorts of certificate verification stuff here before
         deallocating the certificate. */
    
      X509_free (server_cert);
      
      /* --------------------------------------------------- */
      /* DATA EXCHANGE - Send a message and receive a reply. */
    
      err = SSL_write (ssl, "Hello World!", strlen("Hello World!"));  CHK_SSL(err);
      
      err = SSL_read (ssl, buf, sizeof(buf) - 1);                     CHK_SSL(err);
      buf[err] = '\0';
      printf ("Got %d chars:'%s'\n", err, buf);
      SSL_shutdown (ssl);  /* send SSL/TLS close_notify */
    
      /* Clean up. */
    
      close (sd);
      SSL_free (ssl);
      SSL_CTX_free (ctx);
    }
    /* EOF - cli.cpp */
    et voici les principaux message d'errerus que j'obtiens:
    cli.cpp.text+0x1c): undefined reference to `SSL_library_init'
    cli.cpp.text+0x21): undefined reference to `SSL_load_error_strings'
    cli.cpp.text+0x26): undefined reference to `SSLv3_client_method'
    cli.cpp.text+0x2e): undefined reference to `SSL_CTX_new'
    cli.cpp.text+0x59): undefined reference to `ERR_print_errors_fp'
    cli.cpp.text+0x145): undefined reference to `SSL_new'
    cli.cpp.text+0x170): undefined reference to `SSL_set_fd'
    cli.cpp.text+0x17c): undefined reference to `SSL_connect'
    cli.cpp.text+0x194): undefined reference to `ERR_print_errors_fp'
    cli.cpp.text+0x1ac): undefined reference to `SSL_get_current_cipher'
    cli.cpp.text+0x1b4): undefined reference to `SSL_CIPHER_get_name'
    cli.cpp.text+0x1d0): undefined reference to `SSL_get_peer_certificate'
    cli.cpp.text+0x1ff): undefined reference to `X509_get_subject_name'
    cli.cpp.text+0x217): undefined reference to `X509_NAME_oneline'
    cli.cpp.text+0x24e): undefined reference to `CRYPTO_free'
    cli.cpp.text+0x25a): undefined reference to `X509_get_issuer_name'
    cli.cpp.text+0x272): undefined reference to `X509_NAME_oneline'
    cli.cpp.text+0x2a9): undefined reference to `CRYPTO_free'
    cli.cpp.text+0x2b5): undefined reference to `X509_free'
    cli.cpp.text+0x2d1): undefined reference to `SSL_write'
    cli.cpp.text+0x2e9): undefined reference to `ERR_print_errors_fp'
    cli.cpp.text+0x311): undefined reference to `SSL_read'
    cli.cpp.text+0x329): undefined reference to `ERR_print_errors_fp'
    cli.cpp.text+0x368): undefined reference to `SSL_shutdown'
    cli.cpp.text+0x380): undefined reference to `SSL_free'
    cli.cpp.text+0x38c): undefined reference to `SSL_CTX_free'
    pensez vous que c'est a cause d'une bibliotheque que je n'ai pas inclus?

    toute aide est la bien venue.
    merci!!!

  2. #2
    Inactif  
    Homme Profil pro
    Architecte matériel
    Inscrit en
    Décembre 2017
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Architecte matériel

    Informations forums :
    Inscription : Décembre 2017
    Messages : 155
    Points : 0
    Points
    0
    Par défaut
    SSL est un protocole obsolète.

  3. #3
    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 liberal1 Voir le message
    SSL est un protocole obsolète.
    ça n'est absolument pas pertinent.

    Citation Envoyé par stanlagtan Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    cli.cpp:(.text+0x1c): undefined reference to `SSL_library_init'
    cli.cpp:(.text+0x21): undefined reference to `SSL_load_error_strings'
    cli.cpp:(.text+0x26): undefined reference to `SSLv3_client_method'
    (...)
    c'est typique d'un flag manquant, essaye de compiler en rajoutant -lssl au bon endroit
    ç'aurait été plus avisé de poster la discussion dans le forum C/C++ à mon avis, c'est une question classique

  4. #4
    Inactif  
    Homme Profil pro
    Architecte matériel
    Inscrit en
    Décembre 2017
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Architecte matériel

    Informations forums :
    Inscription : Décembre 2017
    Messages : 155
    Points : 0
    Points
    0
    Par défaut
    SSL est obsolète et ne doit pas être utilisé.

Discussions similaires

  1. Utiliser putty avec et pour clé de connexion (win7 x64 local + serveur unix ovh debian 6.0)
    Par westernz dans le forum Applications et environnements graphiques
    Réponses: 0
    Dernier message: 11/04/2012, 23h40
  2. Réponses: 22
    Dernier message: 30/06/2011, 15h48
  3. Programme pour établir une connexion ssh avec un serveur sur unix
    Par sanaline dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 15/06/2011, 12h21
  4. Réponses: 12
    Dernier message: 25/05/2011, 15h47
  5. [DOM] Utilisation de l'API DOM pour créer du HTML sous IE
    Par pedouille dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/01/2006, 14h48

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