2009-02-06 32 views
33

Estoy intentando descargar el contenido de una página web segura (usa https) usando las bibliotecas php y curl.leyendo la página SSL con CURL (php)

Sin embargo, la lectura falló y recibo el error 60: "Problema con el certificado SSL, verifique que el certificado CA esté correcto".

también "Detalles: SSL3_GET_SERVER_CERTIFICATE: certificado fallidos verificar"

Así que ... bastante auto explicativo de error msg.

Mi pregunta es: ¿cómo puedo enviar un certificado SSL (el correcto?) Y obtener esta página para verificarlo y dejarme entrar?

Además, aquí es mi arsenal opciones en caso de que se está preguntando:

$options = array(
     CURLOPT_RETURNTRANSFER => true,  // return web page 
     CURLOPT_HEADER   => false, // don't return headers 
     CURLOPT_FOLLOWLOCATION => true,  // follow redirects 
     CURLOPT_ENCODING  => "",  // handle all encodings 
     CURLOPT_USERAGENT  => "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:x.x.x) Gecko/20041107 Firefox/x.x", // who am i 
     CURLOPT_AUTOREFERER => true,  // set referer on redirect 
     CURLOPT_CONNECTTIMEOUT => 120,  // timeout on connect 
     CURLOPT_TIMEOUT  => 120,  // timeout on response 
     CURLOPT_MAXREDIRS  => 10,  // stop after 10 redirects 
     CURLOPT_SSL_VERIFYHOST => 1, 
    ); 

Cualquier sugerencia sería grande, Andrew

+0

que [este artículo] (http://curl.haxx.se/docs/sslcerts. html) es lo que necesitas. – Sergii

Respuesta

48

Suena como que podría estar malinterpretando el error. Me parece que el sitio al que te estás conectando está auto firmado o tiene algún otro problema común. Al igual que la advertencia habitual del navegador, lo más fácil es desactivar los controles.

Deberá configurar CURLOPT_SSL_VERIFYPEER y CURLOPT_SSL_VERIFYHOST en FALSE. Esto debería desactivar las dos verificaciones principales. Puede que no se requieran ambos, pero al menos esto debería hacer que te vayas.

Para ser claros, esto desactiva una función diseñada para protegerlo. Solo haga esto si ha verificado el certificado y el servidor de otra forma.

Más información en el sitio de PHP: curl_setopt()

+0

ya, ... leí ese artículo antes, .... pero establecer estos dos valores en falso realmente no tiene sentido para mí ... supongo que no sé realmente qué está pasando. sin embargo funcionó perfectamente. así que gracias :) – Andrew

+0

esto me ahorró horas de trabajo! Gracias ! – liveandream

+13

No hagas esto. ES INSEGURO. En cambio: http://docforge.com/wiki/PHP/Curl –

0

No estas enviando el certificado SSL. Parece que hay un problema con el certificado SSL ya que está instalado en el host al que se está contactando. Use la opción -k o --insecure, para pasar la queja.

Ah. Vea la respuesta de Ryan Graham

2

Este es un "problema" con openssl y VeriSign.

Tuve un problema similar y a mi openssl le faltaba el certificado ssl intermedio utilizado por VeriSign para firmar el certificado del servidor.

https://knowledge.verisign.com/support/ssl-certificates-support/index?page=content&id=AR657

que tuvieron que importar estos certificados intermedios desde la página principal de VeriSign o Firefox cert-database-exportación en mi lista ca-certificados local y después de este paso yo era capaz de utilizar wget/rizo utilizar el protegido conexión sin ningún error.

+1

¿Podría ayudarnos con http://stackoverflow.com/questions/10102225/curl-ssl-certificates – MrPHP

21

Si desea utilizar la verificación de pares SSL (apagarlo no siempre es buena idea) es posible usar la próxima solución en Windows a nivel mundial para todas las aplicaciones:

  1. Descargar archivo con los certificados raíz de aquí: http://curl.haxx.se/docs/caextract.html
  2. Agregar a php.ini:

curl.cainfo=C:/path/to/cacert.pem

eso es todo magia, CURL ahora puede verificar los certificados.

(que yo sepa no existe tal problema en Linux, al menos en Ubuntu)

+1

Esto lo hizo! Estaba teniendo este problema en Centos 6 ... así que parece que no todas las distribuciones son inmunes :) –

6

Incluso después de seguir consejos sobre SO .. Es posible que aún tiene problemas con un error como:

error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error 

el problema es con la versión SSL. Utilice el siguiente para la versión 3

curl_setopt($ch, CURLOPT_SSLVERSION,3) 

Estoy asumiendo que u han permitido la verificación de los compañeros y de acogida, así y están apuntando a un archivo de certificado real. P.ej.

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/cacert.pem"); 
+2

CURLOPT_SSLVERSION lo arregló para mí, gracias! – Chris

0

Aparentemente se trata de un error de openssl. Tomcat puede ser configurado para solucionar este problema en /etc/tomcat7/server.xml restringiendo la lista de cifrado disponibles:

<Connector protocol="HTTP/1.1" SSLEnabled="true" ... ciphers="SSL_RSA_WITH_RC4_128_SHA"/>