Estoy tratando de escribir un script PHP usando cURL que puede autorizar a un usuario a través de una página que usa un certificado SSL, además de nombre de usuario y contraseña, y parece que no puedo obtener más allá de la etapa de certificación SSL.Error al utilizar PHP cURL con certificados SSL
Desafortunadamente, en este caso, curl_setopt($handle, CURLOPT_VERIFYPEER, 0)
no es una opción. El certificado es una parte obligatoria de la autenticación; de lo contrario, aparece el error mencionado en this other similar SO post.
He probado unos cuantos de línea de comandos se ejecuta con CURL:
> curl --url https://website
Esto devuelve el error (60) SLL certificate problem
. Si se ajusta el comando para incluir la opción --cacert
:
> curl --url https://website --cacert /path/to/servercert.cer
Funciona muy bien; el sitio web de autenticación es devuelto
Sin embargo, he probado el siguiente código PHP:
$handle = curl_init();
$options = array(
CURLOPT_RETURNTRANSFER => false,
CURLOPT_HEADER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_SSL_VERIFYHOST => '0',
CURLOPT_SSL_VERIFYPEER => '1',
CURLOPT_CAINFO => '/path/to/servercert.cer',
CURLOPT_USERAGENT => 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)',
CURLOPT_VERBOSE => true,
CURLOPT_URL => 'https://website'
);
curl_setopt_array($handle, $options);
curl_exec($handle);
if (curl_errno($handle)) {
echo 'Error: ' . curl_error($handle);
}
curl_close($handle);
yo habría pensado que el código era esencialmente análoga a los comandos de la shell, pero en cambio estoy recibidos con el mensaje de error siguiente:
Error: error setting certificate verify locations: CAfile: /path/to/servercert.cer CApath: none
He leído toda la literatura que puedo encontrar (particularmente en php.net y curl.haxx) y no puedo encontrar nada que solucione este problema. ¿Alguna sugerencia?
EDIT: He intentado chmod 777 servercert.cer
sin éxito. Sin embargo, al ejecutar el script PHP con el código anterior desde la línea de comandos en lugar del navegador a través del php test.php
, funciona perfectamente. ¿Alguna explicación de por qué no funciona en el navegador?
EDIT 2: Estos votos a la baja de las únicas almas lo suficientemente valientes como para responder a esta pregunta se están haciendo viejas. O contribuya con algo significativo o pase por aquí, por favor.
¿Tiene PHP definitivamente permiso para leer ese archivo? Intente ejecutar el script desde la línea de comando: php my.php – Greg
¡Extraño! ¡Lo probé como dijiste, y funcionó perfectamente! ¿Por qué funcionaría desde la línea de comandos, pero no desde el navegador? – Magsol
http://serverfault.com/questions/121768/curl-or-ssl-problems-how-to-solve/297484#297484 –