Al intentar usar file_get_content() con una web que utiliza https, obtenemos los siguientes errores:
PHP Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed in somefile.php on line 15 PHP Warning: file_get_contents(): Failed to enable crypto in somefile.php on line 15 PHP Warning: file_get_contents(https://dominio.com): failed to open stream: operation failed in somefile.php on line 15
La solución que me ha funcionado es la de https://stackoverflow.com/questions/26148701/file-get-contents-ssl-operation-failed-with-code-1-and-more
<?php $arrContextOptions=array( "ssl"=>array( "verify_peer"=>false, "verify_peer_name"=>false, ), ); $response = file_get_contents("https://dominio.com", false, stream_context_create($arrContextOptions)); ?>
Probablemente desactivar esas dos opciones no sea una buena idea de cara a la seguridad ("his breaks SSL certification and is a security hole"), pero es la opción que me ha funcionado.
1 Del Pablo -
Gracias por la info, Jorge! Efectivamente esta es la solución a ese problema.
2 Del OMA -
Para mayor seguridad, es mejor descargar un certificado (fichero cacert.pem) desde https://curl.haxx.se/docs/caextract... (válido por 10 años), y luego hacer referencia a él así:
$arrContextOptions = stream_context_create(
array(
'ssl' => array(
'cafile' => 'cacert.pem', // Certificado de https://curl.haxx.se/ca/cacert.pem
'verify_peer' => true,
'verify_peer_name' => true
)
)
);