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 :

openSSL et certificat


Sujet :

Réseau C

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 179
    Par défaut openSSL et certificat
    Bonjour!
    j'ai un petit problème avec mes certificats...
    j'ai fait des recherches sur le net pour chercher comment en créer pour mon appli serveur/client, j'ai cru trouver mon bonheur sur ce site :la
    et malheureusement, ca ne fonctionne pas...
    il y a toujours un problème sur cette fonction : (on est coté client et le certificat c'est dans keyfile)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if(!SSL_CTX_load_verify_locations(ctx, keyfile, NULL))
        berr_exit("Can't read location verify");
    donc je me demande pourquoi ça ne fonctionne pas...
    sinon, autre question, dans l'exemple que j'ai récupéré, les certificats sont .PEM et sur mon site, ca fait des .CRT. Y a t'il une différence??? (ce qui expliquerai que ça ne fonctionne pas???)

    par avance, merci pour vos réponses

  2. #2
    Membre confirmé Avatar de Bathou
    Inscrit en
    Mars 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2007
    Messages : 179
    Par défaut
    finalement, je n'ai plus de problème avec cette fonction, c'est mon module de vérification des certificats qui coince un peu...
    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
     
    void check_cert(SSL *ssl,char *host)
    {
        X509* peer;
        char peer_CN[256];
     
        if(SSL_get_verify_result(ssl) != X509_V_OK)
        {
            berr_exit("Certificate doesn't verify");
        }
     
        /* Check the cert chain. The chain length
           is automatically checked by OpenSSL when
           we set the verify depth in the ctx */
     
        // Check the common name
        peer = SSL_get_peer_certificate(ssl);
        X509_NAME_get_text_by_NID(X509_get_subject_name(peer), NID_commonName, peer_CN, 256);
     
        host="10.102.13.114";
     
        if(strcasecmp(peer_CN,host))
        {
            printf("%s\n ",peer_CN);
    	printf("%s\n",host);
            err_exit("Common name doesn't match host name");
        }
    }
    comprends po...

  3. #3
    Membre chevronné Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Par défaut
    moi non plus
    Qu'est ce qui ne marche pas au juste ?

  4. #4
    Membre confirmé Avatar de Bathou
    Inscrit en
    Mars 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2007
    Messages : 179
    Par défaut
    a priori ca coince sur la fonction SSL_get_verify_result...

  5. #5
    Membre chevronné Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Par défaut
    C'est peut etre ton pointeur ssl qui a pas été alloué? Tu peux donner le message d'erreur s'il y en a un?

  6. #6
    Membre confirmé Avatar de Bathou
    Inscrit en
    Mars 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2007
    Messages : 179
    Par défaut
    ben si, il a du être aloué... vu que je l'utilise avant dans mon programme principal avec la fonction SSL_connect... j'aurais eu des problèmes avant non??
    j'ai mis ça pour obtenir l'erreur,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if(SSL_get_verify_result(ssl) != X509_V_OK)
     
        {
            perror("SSL accept error\n");
            ERR_print_errors_fp(stderr);
            exit(1);
     
        }
    et c'est très très fort parce que ca me renvoie ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SSL accept error
    : Success
    alors la, je ne comprends pas...
    je suis très très perplexe...

  7. #7
    Membre chevronné Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Par défaut
    quand tu dis que ca coince, il se passe quoi exactement? Un segmentation fault ou juste un code d'erreur ?

  8. #8
    Membre confirmé Avatar de Bathou
    Inscrit en
    Mars 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2007
    Messages : 179
    Par défaut
    je n'ai pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SSL_get_verify_result(ssl) = X509_V_OK
    ce que je souhaiterai parce que du coup, je me retrouve dans mon if et ca quitte le programme...

    et au cas ou j'enleve cette fonction, c'est après que ca me plait pas...
    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
     peer = SSL_get_peer_certificate(ssl);
     
        X509_NAME_get_text_by_NID(X509_get_subject_name(peer), NID_commonName, peer_CN, 256);
     
        host="10.102.13.114";
     
        if(strcasecmp(peer_CN,host))
     
        {
     
            printf("%s\n ",peer_CN);
    	printf("%s\n",host);
     
            err_exit("Common name doesn't match host name");
     
        }
    parce que dans peer_CN, il me met une adresse bizarre : 161.73.54.188
    et je ne comprends pas d'ou il la sort... elle devrai correspondre à mon adresse d'hote vu que c'est moi qui ai fait le certif... ou alors, je n'ai pas tout compris... (ce qui est fort possible...)

  9. #9
    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 : 62
    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
    Par défaut
    Citation Envoyé par Bathou Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if(SSL_get_verify_result(ssl) != X509_V_OK)
     
        {
            perror("SSL accept error\n");
            ERR_print_errors_fp(stderr);
            exit(1);
     
        }
    et c'est très très fort parce que ca me renvoie ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SSL accept error
    : Success
    Pour avoir un résultat pareil, ta fonction ERR_print_errors_fp(), elle utile/analyse quelle variable d'erreur, errno ou bien la variable d'erreur de la couche SSL

    quel est le code de retour de SSL_get_verify_result(), suivant la valeur, cela pouura t'aider à comprendre ton erreur. Voici la liste des valeurs de retour qu'elle peut prendre.

    Prend l'habiture d'afficher tes codes de retour surtout en phase de mise au point et de ne pas tester uniquement par rapport à ce que tu attends, cela t'aidera
    Code exemple : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    long ret = SSL_get_verify_result(ssl);
    if(ret != X509_V_OK)
        {
            perror("SSL accept error, code ret = %d\n", ret);
            ERR_print_errors_fp(stderr);
            exit(1);
        }
    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
    .

  10. #10
    Membre chevronné Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Par défaut
    [ croisement avec ram_000 ]
    Je peux pas trop te dire ce qui va pas dans ton certificat. Ce que je peux te dire c'est que dans le cas d'un certificat serveur, il faut que le CN soit le même que le nom du serveur.
    J'ai trouvé cette page qui détaille les différentes erreurs de la fonction, avec ça tu devrais arriver à isoler l'erreur.
    http://publib.boulder.ibm.com/infoce...fy_result.html

    Tu devrais tracer le code de retour de ta fonction verify au lieu de juste regarder si c'est pas égal a X509_V_OK. Apres tu regardes dans le .h à quelle type d'erreur correspond la valeur numérique renvoyée.

  11. #11
    Membre confirmé Avatar de Bathou
    Inscrit en
    Mars 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2007
    Messages : 179
    Par défaut
    j'ai trouvé l'erreur :

    X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT: self signed certificate
    the passed certificate is self signed and the same certificate cannot be found in the list of trusted certificates.

    comment je peux faire pour corriger cette erreur...?

    Tu devrais tracer le code de retour de ta fonction verify au lieu de juste regarder si c'est pas égal a X509_V_OK. Apres tu regardes dans le .h à quelle type d'erreur correspond la valeur numérique renvoyée.
    je n'ai pas tout compris...

  12. #12
    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 : 62
    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
    Par défaut
    Citation Envoyé par Bathou Voir le message
    Tu devrais tracer le code de retour de ta fonction verify au lieu de juste regarder si c'est pas égal a X509_V_OK. Apres tu regardes dans le .h à quelle type d'erreur correspond la valeur numérique renvoyée.
    je n'ai pas tout compris...
    A peu près la même chose que ce que je t'ai dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    long ret = SSL_get_verify_result(ssl);
    switch(ret)
    {
       case X509_V_OK :
          break;
       case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT:
          printf("self signed certificate
    the passed certificate is self signed and the same certificate cannot be found in the list of trusted certificates");
          exit(1);
     
    etc...
     
    }
    C'est sûr, c'est un peu plus long mais c'est plus safe et en cas de problème, tu sais immédiatement d'où vient le problème (après, il faut chercher la cause mais tu gagnes du temps).

    Pour en revenir à ton problème :
    Je suppose que tu n'as qwu'un seul certificat que tu as généré toi même, le certificat auto signé (self signed)

    En fait, il te faut 2 certificats :
    le 1er est celui que tu as déjà généré, c'est ton autorité de certification. Ce certificat ne peut servir qu'à signer/valider les autres certificat de cette autorité de certification.

    Le 2ème certificat (que tu n'as pas), c'est un certificat serveur signé par ton autorité de certification. C'est ce certificat qu'il faut que ton appli utilise et ensuite, elle utilisera le 1er certificat pour vérifier que le certificat server est émis par une autorité de certification valide (connue et acceptée par toi).

    Au travail maintenant !!
    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
    .

  13. #13
    Membre confirmé Avatar de Bathou
    Inscrit en
    Mars 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2007
    Messages : 179
    Par défaut
    "oui chef!"

    question : les deux certificats, c'est tous les deux des .PEM ??
    et donc, si j'ai compris...
    je refais

    openssl genrsa -out key2.pem 2048
    openssl req -new -x509 -key key2.pem -out certif2.pem -days 365

    et dans mon programme, le client, comme nom de certificat je met certif2.pem ??

    et pouf ca marchera ??
    ce qui m'embete c'est le :
    signé par ton autorité de certification
    et :
    ensuite, elle utilisera le 1er certificat pour vérifier que le certificat server est émis par une autorité de certification valide
    .

    parce que soyons honnete, les certifs et moi ca fait 12000



    bon alors j'ai fait :
    openssl genrsa -out key_serv.pem 2048
    openssl req -new -key key_serv.pem -out certkey.pem
    openssl x509 -req -days 365 -CA cacert.pem -CAkey privkey.pem -CAcreateserial -in certkey.pem -out CERTIFICAT.pem

    et ça ne marche pas en mettant comme certificat CERTIFICAT.pem
    j'ai ooublié une option quelque part...?

  14. #14
    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 : 62
    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
    Par défaut
    Ici, la démarche à l'air assez claire et en plus, c'est du francais.

    A priori, le §2.1, tu l'as déjà fait, il te restre à faire le §2.3 à faire
    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
    .

  15. #15
    Membre confirmé Avatar de Bathou
    Inscrit en
    Mars 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2007
    Messages : 179
    Par défaut
    merci beaucoup pour le site
    mais euh... au risque de devenir rabat joie...
    jai un problème pour la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    openssl ca -config /usr/lib/ssl/openssl.cnf -name CA_ssl_default -extensions SERVER_RSA_SSL -infiles cassl/serverssl.crs
    le terminal m'affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    variable lookup failed for CA_ssl_default::private_key
    5162:error:0E06D06C:configuration file routines:NCONF_get_string:no value:conf_lib.c:329:group=CA_ssl_default name=private_key
    donc si j'ai suivi, j'ai un problème avec CA_ssl_default...
    pourquoi donc...

  16. #16
    Membre chevronné Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Par défaut
    a mon avis c'est le nom de ta clef privée qui est pas bonne. Si aucune clef privée n'est spécifiée en ligne de commande, il va la chercher dans le fichier openssl.cnf Regarde ce que tu as dans ton fichier openssl.cnf et vérifie que l'entrée "private_key" renvoie bien sur la clef privée de ton AC. Sinon tu peux l'indiquer en ligne de commande avec -keyfile <private_key>

  17. #17
    Membre chevronné Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Par défaut
    CA_ssl_default tu es sur que ca correspond a une section dans le fichier openssl.cnf ? Parce que sur le lien que t'as indiqué ram_000, l'auteur a lui-même rajouté cette section. Par défaut il n'y a que la section CA_default. Donc vérifie ton fichier openssl.cnf.

  18. #18
    Membre confirmé Avatar de Bathou
    Inscrit en
    Mars 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2007
    Messages : 179
    Par défaut
    j'ai mis keyfile dans la ligne mais j'obitiens ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    variable lookup failed for CA_ssl_default::certificate
    5510:error:0E06D06C:configuration file routines:NCONF_get_string:no value:conf_lib.c:329:group=CA_ssl_default name=certificate
    sinon dans mon fichier open?cnf j'ai ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    certificate	= $dir/cacert.pem 	# The CA certificate
    serial		= $dir/serial 		# The current serial number
    crlnumber	= $dir/crlnumber	# the current crl number
    					# must be commented out to leave a V1 CRL
    crl		= $dir/crl.pem 		# The current CRL
    private_key	= $dir/private/cakey.pem# The private key
    RANDFILE	= $dir/private/.rand	# private random number file

  19. #19
    Membre chevronné Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Par défaut
    d'apres l'erreur je dirai que le chemin vers le certificat d'AC n'est pas valable. Verifie que le chemin (et le nom) du certificat d'AC correspond bien à la ligne "certificate=$dir/...." dans openssl.cnf
    Tu peux également l'indiquer en ligne de commande avec l'option -cert <CA certificate>

  20. #20
    Membre confirmé Avatar de Bathou
    Inscrit en
    Mars 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2007
    Messages : 179
    Par défaut
    en mettant le certificat en commande, il me met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    unable to load certificate
    6132:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:644:Expecting: TRUSTED CERTIFICATE

Discussions similaires

  1. [OpenSSL] Plusieurs adresses email pour un seul certificat
    Par liberio dans le forum Sécurité
    Réponses: 2
    Dernier message: 24/09/2008, 09h18
  2. Réponses: 0
    Dernier message: 11/09/2008, 16h20
  3. [Fedora 3 + openssl]génération et signature du certificat Root ca
    Par misscricri dans le forum RedHat / CentOS / Fedora
    Réponses: 0
    Dernier message: 12/06/2008, 18h07
  4. openssl:création d'un certificat
    Par zchallal dans le forum Sécurité
    Réponses: 1
    Dernier message: 21/01/2007, 14h29
  5. OpenSSL/OpenLDAP Problème pour la création de certificat
    Par shaun_the_sheep dans le forum Réseau
    Réponses: 4
    Dernier message: 07/10/2005, 13h36

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