Pregunta Conexión https usando CURL desde la línea de comando


Soy nuevo en el mundo de Curl y Cacerts y tengo un problema al conectarme a un servidor. Básicamente, necesito probar la conectividad a través de https desde una máquina a otra máquina. Tengo una URL a la que debo 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 a través de internet, hice esto:

openssl s_client -connect <domain name or Ip address>:443

y obtuve alguna respuesta, incluida la certificado de servidor (dentro -----BEGIN CERTIFICATE----- and -----END CERTIFICATE-----)

¿Qué debo hacer a continuación? Creo que tendré que copiar y pegar el texto dentro BEGIN CERTIFICATE & END CERTIFICATE y guárdalo en un archivo. Pero, ¿Qué tipo de archivo debería ser? .pem, .crt ? .. ¿Qué debería hacer después de eso?

Intenté esto - copié el texto dentro BEGIN CERTIFICATE & END CERTIFICATE y lo guardé en una .crt archivo - nombrado como my-ca.crt (también intenté lo mismo nombrándolo como my-ca.pem archivo) y luego hizo esto:

cmd>curl --cacert my-ca.crt https://[my domain or IP address]

Pero tengo el mismo error.


73
2018-04-09 20:52


origen


Respuestas:


Tuve el mismo problema: estaba obteniendo una página de mi propio sitio, que se sirvió a través de HTTPS, pero Curl emitía el mismo mensaje de "problema de certificado SSL". Trabajé alrededor agregando un -k marcar a la llamada para permitir conexiones inseguras.

curl -k https://whatever.com/script.php

Editar: descubrí la raíz del problema. Estaba usando un certificado SSL (de StartSSL, pero no creo que eso importe mucho) y no había configurado correctamente el certificado intermedio. Si tiene el mismo problema que user1270392 anteriormente, probablemente sea una buena idea prueba tu certificado SSL y arregle cualquier problema con eso antes de recurrir a la curl -k fijar.


87
2018-02-10 17:57



Esa es mi escritura cotidiana:

curl --insecure -v https://www.google.com 2>&1 | awk 'BEGIN { cert=0 } /^\* Server certificate:/ { cert=1 } /^\*/ { if (cert) print }'

Ouput:

* Server certificate:
*    subject: C=US; ST=California; L=Mountain View; O=Google Inc; CN=www.google.com
*    start date: 2016-01-07 11:34:33 GMT
*    expire date: 2016-04-06 00:00:00 GMT
*    issuer: C=US; O=Google Inc; CN=Google Internet Authority G2
*    SSL certificate verify ok.
* Server GFE/2.0 is not blacklisted
* Connection #0 to host www.google.com left intact

18
2018-01-15 13:22



Debes 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 de cacert solo puede usar un archivo, necesita concaturar toda la información de la cadena en 1 archivo

Copie la cadena de certificados (desde su navegador, por ejemplo) en DER binario codificado x.509 (.cer). Haz esto por cada certificado.

Convierta los certs en PEM, y concatúrelos en 1 archivo.

openssl x509 -inform DES -in file1.cer -out file1.pem -text
openssl x509 -inform DES -in file2.cer -out file2.pem -text
openssl x509 -inform DES -in file3.cer -out file3.pem -text

cat *.pem > certRepo

curl --cacert certRepo -u user:passwd -X GET -H 'Content-Type: application/json' "https//somesecureserver.com/rest/field"

Escribí un blog sobre cómo hacer esto aquí: http://javamemento.blogspot.no/2015/10/using-curl-with-ssl-cert-chain.html


17
2017-10-21 09:09



utilizar --cacert para especificar un .crt archivo. ca-root-nss.crt por ejemplo.


12
2018-04-30 10:03



No estoy seguro de la solución que está sugiriendo, pero solo estaba buscando información similar y encontré este sitio útil para usar curl con PHP

http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/


9
2017-07-23 08:07



De hecho, tuve este tipo de problema y lo resuelvo mediante estos pasos:

  1. Obtenga el paquete de certificados de CA raíz desde aquí: https://curl.haxx.se/ca/cacert.pem y guardarlo en local

  2. Encuentra el php.ini archivo

  3. Selecciona el curl.cainfo ser el camino de los certificados. Entonces será algo así como:

curl.cainfo = /path/of/the/keys/cacert.pem


2
2018-02-17 09:22



podrías usar esto

curl_setopt($curl->curl, CURLOPT_SSL_VERIFYPEER, false);


2
2018-03-13 09:11



habiendo dignificado el problema Pude usar el archivo CA predeterminado del sistema existente, en debian6 esto es:

/etc/ssl/certs/ca-certificates.crt

como root esto se puede hacer como:

echo curl.cainfo=/etc/ssl/certs/ca-certificates.crt >> /etc/php5/mods-available/curl.ini

luego reinicie el servidor web.


1
2017-12-07 22:18