with warning tls_process_server_certificate protocol file_get_contents fatal failed error enable disable crypto contents code check 1416f086 php apache openssl

warning - php file_get_contents ssl



OPENSSL file_get_contents(): Error al habilitar crypto (2)

Ok, he encontrado una solución. El problema es que el sitio usa SSLv3. Y sé que hay algunos problemas en el módulo de openssl. Hace algún tiempo tuve el mismo problema con las versiones SSL.

<?php function getSSLPage($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSLVERSION,3); $result = curl_exec($ch); curl_close($ch); return $result; } var_dump(getSSLPage("https://eresearch.fidelity.com/eresearch/evaluate/analystsOpinionsReport.jhtml?symbols=api")); ?>

Cuando configura la versión SSL con curl a v3, entonces funciona.

Editar:

Otro problema en Windows es que no tiene acceso a los certificados. Así que ponga los certificados raíz directamente en curl.

http://curl.haxx.se/docs/caextract.html

aquí puede descargar los certificados raíz.

curl_setopt($ch, CURLOPT_CAINFO, __DIR__ . "/certs/cacert.pem"); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);

Entonces puede usar la opción CURLOPT_SSL_VERIFYPEER con true contrario, obtendrá un error.

Estoy construyendo una plataforma de stock personal (no distribuida). Un componente que me gustaría tener es el gráfico EPS en esta página:

https://eresearch.fidelity.com/eresearch/evaluate/fundamentals/earnings.jhtml?stockspage=earnings&symbols=AAPL&showPriceLine=yes

Como puede ver, la página es https , así que después de días de dar vueltas, habilité el openssl y ahora parece funcionar para todas las páginas https , como las páginas principales de Facebook y Twitter, sin embargo, todavía no funciona para el que yo necesitar.

file_get_contents(''https://facebook.com''); /* works */ file_get_contents(''https://twittercom''); /* works */ file_get_contents(''https://eresearch.fidelity.com/eresearch/evaluate/fundamentals/earnings.jhtml?stockspage=earnings&symbols=AAPL&showPriceLine=yes'');

Estoy recibiendo la advertencia:

Warning: file_get_contents(): SSL: crypto enabling timeout in C:/xampp/htdocs/index.php on line 3 Warning: file_get_contents(): Failed to enable crypto in C:/xampp/htdocs/index.php on line 3 Warning: file_get_contents(https://eresearch.fidelity.com/eresearch/evaluate/fundamentals/earnings.jhtml?stockspage=earnings&symbols=AAPL&showPriceLine=yes): failed to open stream: operation failed in C:/xampp/htdocs/index.php on line 3 Fatal error: Maximum execution time of 30 seconds exceeded in C:/xampp/htdocs/index.php on line 3

La única diferencia que puedo ver es que la página de fidelidad tiene un triángulo cerca de la etiqueta https.


Tenía el mismo problema: estaba en algún lugar del certificado de CA, así que usé el paquete CA utilizado para curl, y funcionó. Puede descargar el paquete curl ca aquí: https://curl.haxx.se/docs/caextract.html

Para problemas de encriptación y seguridad, vea este útil artículo:
https://www.venditan.com/labs/2014/06/26/ssl-and-php-streams-part-1-you-are-doing-it-wrongtm/432

Aquí está el ejemplo:

$url = ''https://www.example.com/api/list''; $cn_match = ''www.example.com''; $data = array ( ''apikey'' => ''[example api key here]'', ''limit'' => intval($limit), ''offset'' => intval($offset) ); // use key ''http'' even if you send the request to https://... $options = array( ''http'' => array( ''header'' => "Content-type: application/x-www-form-urlencoded/r/n", ''method'' => ''POST'', ''content'' => http_build_query($data) ) , ''ssl'' => array( ''verify_peer'' => true, ''cafile'' => [path to file] . "cacert.pem", ''ciphers'' => ''HIGH:TLSv1.2:TLSv1.1:TLSv1.0:!SSLv3:!SSLv2'', ''CN_match'' => $cn_match, ''disable_compression'' => true, ) ); $context = stream_context_create($options); $response = file_get_contents($url, false, $context);

Espero que ayude