minagri-initial / ift-api

GNU Affero General Public License v3.0
0 stars 1 forks source link

Erreur SSL certificate problem: unable to get local issuer certificate #4

Closed guenlm closed 1 year ago

guenlm commented 1 year ago

Bonjour

J'essaye de lancer une requête curl en php depuis un site web de traçabilité pour récupérer un bilan IFT en PDF. Voici mon code (en gros...) :

$url = https://alim.agriculture.gouv.fr/ift-api/api/ift/bilan/pdf?campagneIdMetier=$mil&titre=$titre;
$ch = curl_init();
if (FALSE === $ch)
                throw new Exception('failed to initialize cUrl');

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json','Accept: application/json'));
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POST, true);
// curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS,json_encode($output));

$result = curl_exec($ch);
$errmsg  = curl_error( $ch );
//var_dump(curl_getinfo($ch));
curl_close($ch);

J'obtiens une erreur ermsg = SSL certificate problem: unable to get local issuer certificate J’ai testé et ma variable $output est correcte car elle fonctionne sans souci sur Swagger UI et sur POSTMAN. J’ai essayé aussi /certifie et j’ai le même souci. Que dois-je faire pour ne pas avoir ce blocage sur mon site web ? J'ai vu sur le site https://alim.agriculture.gouv.fr/ift/espace-partenaire qu'il y avait une histoire de certificat de l'api dans le keystore mais je ne le trouve pas et ne sait pas comment l'installer... merci de votre aide. c'est assez urgent et j'ai envoyé des mails à calculette-ift.dgpaat@agriculture.gouv.fr sans réponse...

Pinpin31 commented 1 year ago

Bonjour, ce message d'erreur indique que votre code client ne valide pas le certificat serveur du site web IFT. Deux possibilités :

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$certificate_location = "chemin vers AC certificat";
curl_setopt($ch, CURLOPT_CAINFO, $certificate_location);
curl_setopt($ch, CURLOPT_CAPATH, $certificate_location);

Plus d'info sur Stack : https://stackoverflow.com/questions/28858351/php-ssl-certificate-error-unable-to-get-local-issuer-certificate

guenlm commented 1 year ago

bonjour et merci pour cette réponse super rapide ! et comment je peux récupérer le bundle de certificat ? je n'ai trouvé aucune info sur le site merci

Pinpin31 commented 1 year ago

Je ne sais pas sur quel OS vous développez mais le bundle AC du ministère est fourni par Geant : https://geant.org/ Tous les navigateurs et OS récents ont déjà ce bundle intégré. Sur PHP, le bundle n'a pas l'air fourni ou alors la version PHP installée sur votre OS ne sait pas récupérer le bundle.

Le bundle peut être récupéré en suivant ce lien.

guenlm commented 1 year ago

merci bcp. je teste tout de suite car j'avais mis le certificat d'ici mais cela ne fonctionnait pas mieux. je suis sur linux et php8.1 (en fpm)

guenlm commented 1 year ago

OUI !!! trop fort. ça fonctionne nickel maintenant. merci ! et bon dimanche...