example ejemplos cacert php ssl curl

ejemplos - curl php post



leyendo la página SSL con CURL(php) (7)

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

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: verificación de certificado fallida"

Entonces ... bastante errores auto explicativos.

Mi pregunta es: ¿cómo envío un certificado SSL (el correcto?) Y obtengo esta página para verificarlo y dejarme entrar?

Además, aquí está mi matriz de opciones en caso de que se pregunte:

$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 genial, Andrew


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

Tuve que importar estos certificados intermedios de VeriSign Homepage o Firefox cert-database-export a mi lista de certificados ca locales y después de este paso pude usar wget / curl para usar la conexión protegida sin ningún error.


Esto es aparentemente en error openssl. Tomcat se puede configurar para solucionar esto en /etc/tomcat7/server.xml restringiendo la lista de cifrado disponible:

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


Incluso después de seguir los consejos sobre SO ... aún puede tener 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. Use lo siguiente para la versión 3

curl_setopt($ch, CURLOPT_SSLVERSION,3)

Supongo que también ha habilitado la verificación de igual y host y apunta 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");


No está 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. Ver la respuesta de Ryan Graham


Parece que estás 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.

Tendrá que establecer 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 que quede claro, esto desactiva una función diseñada para protegerte. Solo haga esto si ha verificado el certificado y el servidor de otra forma.

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


Si desea usar SSL peer verification (desactivarlo no siempre es una buena idea), puede usar la siguiente solución en Windows globalmente para todas las aplicaciones:

  1. Descargue el archivo con certificados raíz desde 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 certificados.

(como sé que no hay tal problema en Linux, al menos en Ubuntu)