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.