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

Réseau C Discussion :

Erreur avec l'utilisation de la fonction "BIO_connect"


Sujet :

Réseau C

  1. #1
    Membre du Club Avatar de Bathou
    Inscrit en
    Mars 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mars 2007
    Messages : 179
    Points : 52
    Points
    52
    Par défaut Erreur avec l'utilisation de la fonction "BIO_connect"
    Bonjour,
    je fais une appli serveur/client en utilisant OpenSSL et j'ai un petit problème coté client avec le fonction BIO_connect...
    il me renvoie l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    3609:error:2006A066:BIO routines:BIO_get_host_ip:bad hostname lookup:b_sock.c:136:host=name
    name contient mon @IP
    voici le code qui correspond à la ligne incriminée :
    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
     
      /* Create and setup the connection */
     
      BIO_set_conn_hostname(bio, "name: 123456");
     
      printf("create and setup connection : OK\n");
     
      if(BIO_do_connect(bio) <= 0)
     
      {
        /*Handle failed connection*/
        fprintf(stderr, "Error attempting to connect\n");
     
        ERR_print_errors_fp(stderr);
     
        BIO_free_all(bio);
     
        SSL_CTX_free(ctx);
     
        return 0;
      }
    si vous pouviez m'aider parce que je coince un peu la... merci par avance ^^
    Parce que je nêm bien râler moi...

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Un petit problème dans BIO_set_conn_hostname() ? Il me semble que le message d'erreur affiché est pourtant clair.

    L'appel que tu fais BIO_set_conn_hostname(bio, "name: 123456") semble incorrect.

    Tu cherches à te connecter à une machine qui s'appelle "name" sur le port 123456.

    D'abord, est ce que la résolution de nom fonctionne sur "name" (est ce que "nslookup name" te retourne une adresse IP valide.

    Ensuite, un numéro de port va jusqu'à 65535 donc 123456, c'est un poil trop grand

    Et enfin, d'après la doc OpenSSL, il n'y a pas d'espace entre le nom de la machine et le caractère ":"
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre du Club Avatar de Bathou
    Inscrit en
    Mars 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mars 2007
    Messages : 179
    Points : 52
    Points
    52
    Par défaut
    merci pour ta réponse ^^
    effectivement, coté client ça marche nikel maintenant (l'espace était fatal, le numéro de port aussi...).
    par contre j'ai un problème coté serveur...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    sbio=BIO_new_socket(temp_sock_descriptor,BIO_NOCLOSE);
            ssl=SSL_new(ctx);
            SSL_set_bio(ssl,sbio,sbio);
            if((r=SSL_accept(ssl)<=0))
              {
              perror("SSL accept error\n");
    	  ERR_print_errors_fp(stderr);
              //exit(1);
              }
    et l'erreur il me met :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    4624:error:140C5042:SSL routines:SSL_UNDEFINED_FUNCTION:called a function you should not call:ssl_lib.c:2071:
    le bug est au niveau du SSL_accept je pense(pourquoi j'ai pas le droit de l'appelé...?)...je débute avec OpenSSL et c'est pas facile surtout avec mon niveau d'anglais...:s
    Parce que je nêm bien râler moi...

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Sur ce coup là, tu ne donnes pas beaucoup de code pour que l'on puisse t'aider.

    Néanmoins, quelques pistes :
    • Certains numéro de port (Sous Unix, les port < 1024) nécessitent d'être root pour faire un accept dessus.
    • As tu un certificat SSL valide
    • As tu les droits de lecture sur ce certificat


    Donne un peu plus de code côté serveur et tous les messages d'erreur.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Membre du Club Avatar de Bathou
    Inscrit en
    Mars 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mars 2007
    Messages : 179
    Points : 52
    Points
    52
    Par défaut
    nécessitent d'être root...??
    normalement, le certificat SSl valide, je l'ai parce que je l'ai cré authentifié en utilisant ce site la : la
    et donc j'ai suposé que tout était bon...
    sinon pour le 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
    /*Initializing OpenSSL*/
      SSL_load_error_strings();
      ERR_load_BIO_strings();
      OpenSSL_add_all_algorithms();
      SSL_library_init();
     
      printf("Initialisation SSL : OK\n");
     
      /*SSL Context*/
      ctx = SSL_CTX_new(SSLv23_client_method());
     
      printf("SSL Context : OK\n");
     
      /*CREATION DE LA SOCKET*/
      sock_descriptor = socket(AF_INET, SOCK_STREAM, 0);
      if (sock_descriptor ==-1)
        {
        perror("call to socket\n");
        exit(1);
        }
      printf("socket ok\n");
     
      /*initialisation*/
      bzero(&sin,sizeof(sin));
      sin.sin_family=AF_INET;
      sin.sin_addr.s_addr=INADDR_ANY;
      sin.sin_port=htons(port);
     
      /*BIND*/
      if (bind(sock_descriptor, (struct sockaddr*)&sin, sizeof(sin))==-1)
        {
        perror("call to bind\n");
        exit(1);
        }
      printf("bind ok\n");
     
      /*LISTEN*/
      if (listen(sock_descriptor, 20)==-1)
        {
        perror("call to listen\n");
        exit(1);
        }
     
      printf("Accepting connections...\n");
     
      /**/
      while(1)
        {
        address_size=sizeof(struct sockaddr_in);
        if ((temp_sock_descriptor=accept(sock_descriptor, (struct sockaddr *)&pin,
            &address_size))==-1)
          {
          perror("call to accept\n");
          exit(1);
          }
        printf("accept ok\n");
            
               sbio=BIO_new_socket(temp_sock_descriptor,BIO_NOCLOSE);
            ssl=SSL_new(ctx);
            SSL_set_bio(ssl,sbio,sbio);
     
            if((r=SSL_accept(ssl)<=0))
              {
              perror("SSL accept error\n");
              ERR_print_errors_fp(stderr);
              //exit(1);
              }
     
            }
      /* Close the connection and free the context */
     
      BIO_free_all(sbio);
     
      SSL_CTX_free(ctx);
     
      return 0;
    et voila ce que m'affiche mon ami le 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
    variable OK
    Initialisation SSL : OK
    SSL Context : OK
    socket ok
    bind ok
    Accepting connections...
    accept ok
    SSL accept error
    : Success
    4624:error:140C5042:SSL routines:SSL_UNDEFINED_FUNCTION:called a function you should not call:ssl_lib.c:2071:
    accept ok
    SSL accept error
    : Illegal seek
    4624:error:140C5042:SSL routines:SSL_UNDEFINED_FUNCTION:called a function you should not call:ssl_lib.c:2071:
    Parce que je nêm bien râler moi...

  6. #6
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Est ce que tu veux modifier un peu ton code STP et remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            if((r=SSL_accept(ssl)<=0))
              {
              perror("SSL accept error\n");
    	  ERR_print_errors_fp(stderr);
              //exit(1);
              }
    par
    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
     
    r=SSL_accept(ssl);
    printf("SSL_accept ret = %d\n", r);
    if(r == 1)
    {
       printf("The TLS/SSL handshake was successfully completed, a TLS/SSL connection has been established\n");
    }
    else if(r == 0)
    {
       printf("The TLS/SSL handshake was not successful but was shut down controlled and by the specifications of the TLS/SSL protocol. Call SSL_get_error() with the return value ret to find out the reason.\n");
    }
    else if(r < 0)
    {
       printf("The TLS/SSL handshake was not successful because a fatal error occurred either at the protocol level or a connection failure occurred. The shutdown was not clean. It can also occur of action is need to continue the operation for non-blocking BIOs. Call SSL_get_error() with the return value ret to find out the reason.\n");
    }
    else
    {
       printf("Je ne sais pas quoi penser\n");
    }
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  7. #7
    Membre du Club Avatar de Bathou
    Inscrit en
    Mars 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mars 2007
    Messages : 179
    Points : 52
    Points
    52
    Par défaut
    je peux et j'ai fait ^^
    ca m'a donné ca sur le terminal:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Accepting connections...
    accept ok
    SSL_accept ret = 0
    The TLS/SSL handshake was not successful but was shut down controlled and by the specifications of the  TLS/SSL protocol. Call SSL_get_error() with the return value ret to find out the reason.
    accept ok
    SSL_accept ret = 0
    The TLS/SSL handshake was not successful but was shut down controlled and by the specifications of the  TLS/SSL protocol. Call SSL_get_error() with the return value ret to find out the reason.
    Parce que je nêm bien râler moi...

  8. #8
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Visiblement, tu as une erreur ou un probleme dans le handshake SSL

    tu peux ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int err_ssl = SSL_get_error(ssl, r);
       printf("SSL_get_error() = %d\n", err_ssl);
    dans la branche "else if(r == 0)"

    et regarder à quoi correspond le code de retour (je n'ai pas les includes) par rapport à http://www.openssl.org/docs/ssl/SSL_get_error.html
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  9. #9
    Membre du Club Avatar de Bathou
    Inscrit en
    Mars 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mars 2007
    Messages : 179
    Points : 52
    Points
    52
    Par défaut
    j'obtiens ca sur le terminal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Accepting connections...
    accept ok
    SSL_accept ret = 0
    The TLS/SSL handshake was not successful but was shut down controlled and by the specifications of the  TLS/SSL protocol. Call SSL_get_error() with the return value ret to find out the reason.
    SSL_get_error() = 1
    accept ok
    SSL_accept ret = 0
    The TLS/SSL handshake was not successful but was shut down controlled and by the specifications of the  TLS/SSL protocol. Call SSL_get_error() with the return value ret to find out the reason.
    SSL_get_error() = 1
    du coup, comme c'est 1 le retour, soit je sais pas lire, soit ca ne correspond pas à ce qu'il y a sur le site de openSSL... soit j'ai pas tout compris, ce qui est possible aussi...
    Parce que je nêm bien râler moi...

  10. #10
    Membre du Club Avatar de Bathou
    Inscrit en
    Mars 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mars 2007
    Messages : 179
    Points : 52
    Points
    52
    Par défaut
    c'est bon, j'ai trouvé quelle erreur c'était : c'est SSL_ERROR_SSL
    A failure in the SSL library occurred, usually a protocol error. The OpenSSL error queue contains more information on the error.
    que puis-je donc faire...?
    Parce que je nêm bien râler moi...

  11. #11
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Une idée : "ctx = SSL_CTX_new(SSLv23_client_method());"

    comme c'est un serveur il faut peut être faire "ctx = SSL_CTX_new(SSLv23_server_method());"
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  12. #12
    Membre du Club Avatar de Bathou
    Inscrit en
    Mars 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mars 2007
    Messages : 179
    Points : 52
    Points
    52
    Par défaut
    alors le problème c'est qu'il est coincé sur le accept...
    et coté client, il attend...
    bizarre...
    Parce que je nêm bien râler moi...

  13. #13
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Plus d'idées, désolé.

    T'as pas d'exemples qui fasse à peu près la même chose sur Internet ou sur OpenSSL.org ?
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  14. #14
    Membre du Club Avatar de Bathou
    Inscrit en
    Mars 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mars 2007
    Messages : 179
    Points : 52
    Points
    52
    Par défaut
    alors, j'ai récupéré des softs sur deux sites différents :
    celui-la qui est un peu difficile à comprendre
    et l'autre duquel je me suis plus inspiré : celui-ci celui la, c'est en 3 parties, les softs sont à la fin des pages...
    Il est plutôt didactique le dernier mais par contre dans les softs(à part le dernier que j'ai pas tout compris) je n'ai pas d'exemple de serveur...


    mais c'est pas évident à trouver de la doc qui correspond à ce que je veux sur le net à propos d'openSSL...
    Parce que je nêm bien râler moi...

Discussions similaires

  1. Erreur avec GetImageSize : utilisation d'une URL
    Par Are-no dans le forum Langage
    Réponses: 4
    Dernier message: 14/02/2007, 23h41
  2. Problème avec l'utilisation de la fonction clock
    Par Matgic95 dans le forum C++Builder
    Réponses: 13
    Dernier message: 09/05/2005, 19h27
  3. Retour d'erreur avec l'utilisation de la commande For en VBS
    Par genialk2000 dans le forum VBScript
    Réponses: 3
    Dernier message: 30/03/2005, 18h45

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