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

Langage PHP Discussion :

cURL appel webservice rest certificat ssl fichier pfx


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 33
    Par défaut cURL appel webservice rest certificat ssl fichier pfx
    Bonjour.

    Je dois faire appel à un webservice Rest en php.

    Pour me connecter au webservice j'ai besoin d'un certificat ssl. Je dispose comme certificat d'un fichier pfx avec un mot de passe.

    Après quelques recherches, je l'ai décomposé en deux fichiers .pem (un fichier clé et un fichier certificat) via openssl comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    pkcs12 -in monfichier.pfx -out moncertificat.pem -clcerts -nokeys -passin 'pass:monmotdepasse'
    pkcs12 -in monfichier.pfx -out macle.pem -nocerts -nodes -passin 'pass:monmotdepasse'
    Ensuite pour appeler mon webservice je passe par curl comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $url = "url_du_webervice";
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSLCERT,"path/to/moncertificat.pem");
    curl_setopt($ch, CURLOPT_SSLCERTPASSWD,"monmotdepasse");
    curl_setopt($ch, CURLOPT_SSLKEY,"path/to/macle.pem");
    $response = curl_exec($ch);
    if($response === false) {
        var_dump(curl_error($ch));
    } else {
        var_dump($response);
    }
    curl_close($ch);
    Et j'optiens toujours l'erreur suivante : SSL certificate problem: self signed certificate in certificate chain

    J'ai vu sur ce lien : https://www.pixelstech.net/article/1...tificate-chain qu'on pouvait télécharger un certificat sur http://curl.haxx.se/ca/cacert.pem.

    Du coup une fois ce fichier téléchargé, je réécris le code d'appel suivant pour mon ws

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $url = "url_du_webervice";
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CAINFO,EA_PATH."/path/to/cacert.pem");
    $response = curl_exec($ch);
    if($response === false) {
        var_dump(curl_error($ch));
    } else {
        var_dump($response);
    }
    curl_close($ch);
    Et là cela fonctionne j'ai bien un retour correct de la page.

    Du coup j'ai du mal à comprendre, je n'ai pas besoin du certificat pfx qui m'a été fourni au final ? En quoi c'est mieux d'utiliser ce fichier cacert.pem

    Merci d'avance pour votre aide.

  2. #2
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par défaut
    Bonjour,

    pour fournir une connexion chiffrée, un serveur – en l’occurence ton web service – a besoin de fournir un certificat pour prouver son identité.

    Le client – en l’occurence cURL – vérifie alors que ce certificat se trouve dans la liste de certificats auxquels il accorde confiance, ou bien qu’il a été signé par une autorité de certification (CA) à laquelle il accorde confiance.

    Le fichier .pfx qui t’a été fourni est censé ajouter le certificat du web service à la liste des certificats auxquels cURL fait confiance. S’il ne marche pas, c’est peut-être qu’il faut inclure toute la chaîne de certificats lors de la conversion en .pem. Essaye en passant l’option -chain à la place de -clcerts.

    Le problème est que cURL, par défaut, a une base de certificats vide, donc il ne fait confiance à aucun certificat ni à aucune CA. C’est à toi de choisir à qui cURL doit faire confiance.
    Pour des raisons pratiques, les éditeurs de navigateurs incluent une liste de certificats et CA de confiance. En utilisant un navigateur, tu délègues donc ton accord de confiance à l’éditeur du navigateur : il choisit à ta place.

    Le fichier cacert.pem que tu as téléchargé contient la liste de certificats et CA de confiance maintenue par Mozilla pour le navigateur Firefox, et extraite par la communauté de cURL. Le certificat de ton web service, ou plus probablement une autorité qui l’a signé, se trouve dans cette liste.

    Pour résumer :
    • avec le .pfx (en supposant qu’il fonctionne), tu ajoutes uniquement le certificat dont tu as besoin ;
    • avec cacert.pem, tu ajoutes une liste de plusieurs certificats et CA qui a été établie par quelqu’un que tu ne connais pas ; mais c’est plus pratique, et ça te re-servira si un jour tu dois communiquer en chiffré avec un autre serveur.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

Discussions similaires

  1. [NAV2009 R2] Appel WebService Externe SSL + Certificat
    Par Julien62112 dans le forum Microsoft Dynamics
    Réponses: 0
    Dernier message: 27/04/2016, 09h09
  2. Accès WebService via certificat SSL P12
    Par Tequilapaf dans le forum Glassfish et Payara
    Réponses: 1
    Dernier message: 03/06/2015, 18h07
  3. interroger un webservice rest avec cURL
    Par lekunfry dans le forum Langage
    Réponses: 1
    Dernier message: 12/11/2012, 18h23
  4. RESTful WebService et transfert de fichier
    Par heisen89 dans le forum Services Web
    Réponses: 0
    Dernier message: 05/07/2012, 10h51
  5. curl ne reconnait pas mon certificat SSL
    Par tchize_ dans le forum Réseau
    Réponses: 0
    Dernier message: 23/02/2011, 12h33

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