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 !!!![]()
Bonjour à tous,<br /><br />Je remonte ce vieux sujet mais j'ai exactement le même problème. Cependant la solution proposée (passer l'environnement PHP en stable) ne résout pas le problème chez moi.<br /><br />Pour résumer :<br />Lorsque j'utilise `file_get_contents` pour accéder à une ressource externe, j'obtiens une erreur avec certains site :<br /><br />> 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'est une https://stackoverflow.com/questions/26148701/file-get-contents-ssl-operation-failed-with-code-1-failed-to-enable-crypto?noredirect=1&lq=1 faille de sécurité.<br /><br /> $options = https://filerun.com/ <br /> "ssl" => [<br /> "verify_peer"=>false,<br /> "verify_peer_name"=>false<br /> ]<br /> ];<br /><br /> $file = file_get_contents("https://www.velib-metropole.fr/assets/static_files/images/ico_velo_elec_full.png", 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's Encrypt<br />* Site configuré via .htaccess pour être toujours en HTTPS<br /><br />**Quelqu'un a t il déjà rencontré ce problème ?** Je n'ai le problème que depuis ce matin ... Hier, j'ai passé le site en PHP 7.3 (précédemment 7.0) pour installer [FileRun dessus, c'est tout. Repasser en PHP 7.0 ne règle pas le problème.
> SSL routines:SSL3_GET_SERVER_CERTIFICATE<br />> 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 />```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 />```
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'ai testée aussi, ailleurs<br /><br />sur mon pc, à jour debian 10:<br />```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 />```<br /><br />ce n'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 …