File_get_contents https SSL operation failed

Bonjour,

J'ai un mutu perso2014, non migré en https.
Sur un script php, je fais un file_get_contents vers une url https (avec un context GET), et j'ai une erreur:

file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed in /home/

Comment faire pour que çà fonctionne ? Ce script tourne très bien sur easyphp après avoir activé:
extension=php_openssl.dll
allow_url_fopen = On

Merci,

Bonjour,

Le file gets contents est vers une url à toi ou à quelqu'un d'autre ?

As tu essayé l'environnement d'exécution stable ?
Car l'ancien environnement n'est pas à jour et certains sites qui ne supportent que les protocoles à jour donc si tu fais une requête depuis l'ancien environnement ça ne passe pas.

Merci,

l'url est vers un domaine externe
mon ovhconfig:
app.engine=phpcgi
app.engine.version=5.6
http.firewall=none
environment=production

Il faut donc bien passer en environnement stable https://docs.ovh.com/fr/fr/web/hosting/modifier-lenvironnement-dexecution-de-mon-hebergement-web/#comment-modifier-l-environnement-d-execution

Mille merci Buddy, it works !!!

:kissing:

Bonjour à tous,<br /><br />Je remonte ce vieux sujet mais j&#39;ai exactement le même problème. Cependant la solution proposée (passer l&#39;environnement PHP en stable) ne résout pas le problème chez moi.<br /><br />Pour résumer :<br />Lorsque j&#39;utilise &#96;file_get_contents&#96; pour accéder à une ressource externe, j&#39;obtiens une erreur avec certains site :<br /><br />&gt;  file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed<br /><br />En configurant la requête sans vérification des paires comme ci-dessous, ça fonctionne mais c&#39;est une https://stackoverflow.com/questions/26148701/file-get-contents-ssl-operation-failed-with-code-1-failed-to-enable-crypto?noredirect&#61;1&amp;lq&#61;1 faille de sécurité.<br /><br />    $options &#61; https://filerun.com/ <br />        &#34;ssl&#34; &#61;&gt; [<br />            &#34;verify_peer&#34;&#61;&gt;false,<br />            &#34;verify_peer_name&#34;&#61;&gt;false<br />        ]<br />    ];<br /><br />    $file &#61; file_get_contents(&#34;https://www.velib-metropole.fr/assets/static_files/images/ico_velo_elec_full.png&#34;, false, stream_context_create($options));<br /><br /><br />Ma configuration :<br /><br />* OVH Mutualisé<br />* PHP 7.3, stable, moteur PHP, mode dév<br />* SSL Let&#39;s Encrypt<br />* Site configuré via .htaccess pour être toujours en HTTPS<br /><br />**Quelqu&#39;un a  t il déjà rencontré ce problème ?** Je n&#39;ai le problème que depuis ce matin ... Hier, j&#39;ai passé le site en PHP 7.3 (précédemment 7.0) pour installer [FileRun dessus, c&#39;est tout. Repasser en PHP 7.0 ne règle pas le problème.
&gt; SSL routines:SSL3_GET_SERVER_CERTIFICATE<br />&gt; Warning: file_get_contents(): Failed to enable crypto in /home/...<br /><br />il semble que ssl3 pose souci avec fopen:  https://stackoverflow.com/a/14078318<br /><br />mais ssl3 devrait ne plus être utilisé<br />https://www.octopuce.fr/nouvelle-faille-de-securite-la-fin-de-sslv3-est-annoncee/<br />et TLS1.2 est  possible<br />&#96;&#96;&#96;text<br />nmap --script ssl-enum-ciphers -p 443 www.velib-metropole.fr | grep -i tlsv<br />|   TLSv1.0: <br />|   TLSv1.1: <br />|   TLSv1.2:<br />&#96;&#96;&#96;

Merci pour ta réponse !

Pour tester, j'ai fait le code suivant en utilisant CURL avec un « User Agent » pour mettre de côté l'hypothèse que le site de Vélib (notre exemple) bloque les requêtes `file_get_contents()`. Je configure bien la requête pour qu'elle emploie TLS 1.2.

function get_data($url) {
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');

curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);

$data = curl_exec($ch);
echo 'Erreur Curl : ' . curl_error($ch);
curl_close($ch);
return $data;
}

$returned_content = get_data('https://www.1metropole.fr/assets/static_files/images/ico_velo_elec_full.png'metropole.fr/assets/static_files/images/ico_velo_elec_full.png');
echo $returned_content;

J’obtiens l'erreur suivante :
> SSL certificate problem: unable to get local issuer certificate

Cela indiquerait que PHP n'arrive pas à trouver le bon certificat sur mon serveur ? Est-ce qu'OVH n'aurait pas les certificats à jour ?

J'ai essayé de charger des certificats (http://curl.haxx.se/ca/cacert.pem) manuellement, via ces options. Pour rappel je suis en mutualisé :

$certificate = DIR . "/cacert.pem";
curl_setopt($ch, CURLOPT_CAINFO, $certificate);
curl_setopt($ch, CURLOPT_CAPATH, $certificate);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);

Ca n'a pas d'effet …

Une idée ? Le code fonctionne très bien (avec ou sans les certificats téléchargés) si je pointe vers Google.com, par exemple.

cet erreur ssl3, je l&#39;ai testée aussi, ailleurs<br /><br />sur mon pc, à jour debian 10:<br />&#96;&#96;&#96;text<br />curl -sS -O https://www.velib-metropole.fr/assets/static_files/images/ico_velo_elec_full.png<br /><br />curl: (60) SSL certificate problem: unable to get local issuer certificate<br />More details here: https://curl.haxx.se/docs/sslcerts.html<br /><br />curl failed to verify the legitimacy of the server and therefore could not<br />establish a secure connection to it. To learn more about this situation and<br />how to fix it, please visit the web page mentioned above.<br />&#96;&#96;&#96;<br /><br />ce n&#39;est pas ton serveur en cause

Donc si je te comprends bien, le problème vient de leur côté et on a pas trop de solution. Merci pour tes réponses en tout cas !

je le pense, mais c'est la première fois que je suis confronté à ça

Pour info, la connexion SSL fonctionne à nouveau parfaitement vers le site Vélib depuis une heure. Probablement un bug temporaire de leur côté. Ca m'apprendra à vouloir régler les problèmes, ils se résolvent tous seuls maintenant on dirait …