Soy nuevo en el mundo de Curl and Cacerts y enfrento un problema mientras me conecto a un servidor. Básicamente, necesito probar la conectividad a través de https de una máquina a otra. Tengo una URL a la que necesito conectarme desde la Máquina A (una máquina Linux) Intenté esto en el símbolo del sistema
cmd> curl https://[my domain or IP address]
y obtuve lo siguiente:
curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Al revisar algunos artículos por internet, hice esto:
openssl s_client -connect <domain name or Ip address>:443
y obtuve alguna respuesta, incluido el certificado del servidor (dentro -----BEGIN CERTIFICATE----- and -----END CERTIFICATE-----
).
¿Qué debo hacer a continuación desde aquí? Creo que tendré que copiar y pegar el texto dentro
BEGIN CERTIFICATE & END CERTIFICATE
y guardarlo en un archivo. Pero, ¿qué tipo de archivo debería ser? .pem
, .crt
? .. ¿Qué debo hacer después de eso?
Intenté esto, copié el texto dentro BEGIN CERTIFICATE & END CERTIFICATE
y lo guardé en un .crt
archivo, lo nombré como my-ca.crt
(también probé lo mismo nombrándolo como my-ca.pem
archivo) y luego hice esto:
cmd>curl --cacert my-ca.crt https://[my domain or IP address]
Pero tengo el mismo error.
fuente
--insecure
para ignorar el error SSL.Respuestas:
Tuve el mismo problema: estaba buscando una página de mi propio sitio, que se sirvió a través de HTTPS, pero curl estaba dando el mismo mensaje de "problema de certificado SSL". Lo solucioné agregando un
-k
indicador a la llamada para permitir conexiones inseguras.Editar: descubrí la raíz del problema. Estaba usando un certificado SSL (de StartSSL, pero no creo que eso importe demasiado) y no había configurado el certificado intermedio correctamente. Si tiene el mismo problema que el usuario 1270392 anterior, probablemente sea una buena idea probar su certificado SSL y solucionar cualquier problema antes de recurrir a la
curl -k
solución.fuente
Solución simple
Ese es mi guión cotidiano:
Salida:
fuente
--insecure
conexión a través de TSL, todos los días ...Debe proporcionar toda la cadena de certificados para curl, ya que curl ya no se envía con ningún certificado de CA. Dado que la opción cacert solo puede usar un archivo, debe concatenar la información de la cadena completa en 1 archivo
Copie la cadena de certificados (desde su navegador, por ejemplo) en binario codificado DER x.509 (.cer). Haga esto para cada certificado.
Convierta los certificados en PEM y concatéelos en 1 archivo.
Escribí un blog sobre cómo hacer esto aquí: http://javamemento.blogspot.no/2015/10/using-curl-with-ssl-cert-chain.html
fuente
use
--cacert
para especificar un.crt
archivo.ca-root-nss.crt
por ejemplo.fuente
En realidad tuve este tipo de problema y lo soluciono con estos pasos:
Obtenga el paquete de certificados de CA raíz desde aquí: https://curl.haxx.se/ca/cacert.pem y guárdelo en local
Encuentra el
php.ini
archivoConfigure el
curl.cainfo
para ser la ruta de los certificados. Entonces será algo como:curl.cainfo = /path/of/the/keys/cacert.pem
fuente
Aquí puede encontrar los certificados de CA con instrucciones para descargar y convertir los certificados de CA de Mozilla . Una vez que obtienes
ca-bundle.crt
ocacert.pem
simplemente usas:o
fuente
habiendo resuelto el problema pude usar el archivo CA predeterminado del sistema existente, en debian6 esto es:
como root esto se puede hacer como:
luego reinicie el servidor web.
fuente
podrías usar esto
curl_setopt($curl->curl, CURLOPT_SSL_VERIFYPEER, false);
fuente
Para mí, solo quería probar un sitio web que tenía una redirección http-> https automática. Creo que ya tenía algunos certificados instalados, así que esto solo funciona para mí en Ubuntu 16.04 corriendo
curl 7.47.0 (x86_64-pc-linux-gnu) libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2.3
curl --proto-default https <target>
fuente
Con las versiones modernas de curl, simplemente puede anular a qué dirección IP conectarse, utilizando --resolve o --connect-to (curl más reciente que la versión 7.49). Esto funciona incluso con SSL / SNI. Todos los detalles están en la página del manual.
Por ejemplo, para anular DNS y conectarse a www.example.com con ssl usando una dirección IP particular: (Esto también anulará ipv6)
Otro ejemplo, para conectarse a un servidor de fondo particular llamado backend1 en el puerto 8080
Recuerde agregar el encabezado del host si el servidor necesita que responda correctamente:
fuente