1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    juin 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Haïti

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2016
    Messages : 6
    Points : 7
    Points
    7

    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 : 28
    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
    2 459
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : novembre 2010
    Messages : 2 459
    Points : 6 604
    Points
    6 604

    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
    Avant donc que d'écrire, apprenez à penser.
    Selon que notre idée est plus ou moins obscure, l'expression la suit, ou moins nette, ou plus pure.
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément.
                                                        - Nicolas Boileau, L'Art poétique

  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 : 28
    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. 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