¿Curl tiene una opción --no-check-certificate como wget?

448

Estoy tratando de hacer una solicitud curl a uno de nuestros servidores de desarrollo local que ejecutan un sitio de desarrollo con un certificado SSL autofirmado. Estoy usando curl desde la línea de comando.

Vi algunas entradas de blog mencionar que se pueden agregar a la lista de certificados o especifica un específico (auto firmado) certificado como válido, pero no es un cajón de sastre forma de decir "no verificar" el certificado SSL - como el --no-check-certificateque se wget tiene?

cwd
fuente
1
--insecureno va a funcionar si usted tiene ciertas versiones de PHP o Apache como se detalla en superuser.com/questions/1015325/...
user3338098

Respuestas:

598

Si. Desde la página del manual :

-k, --seguro

(TLS) De forma predeterminada, se verifica que cada conexión SSL curl sea segura. Esta opción permite que rizo continúe y funcione incluso para conexiones de servidor que de otro modo se considerarían inseguras.

La conexión del servidor se verifica asegurándose de que el certificado del servidor contiene el nombre correcto y se verifica con éxito utilizando el almacén de certificados.

Consulte este recurso en línea para obtener más detalles: https://curl.haxx.se/docs/sslcerts.html

Vea también --proxy-insecure y --cacert.

La referencia mencionada en esa entrada de la página del manual describe algunos de los comportamientos específicos de -k.

Estos comportamientos se pueden observar con curlsolicitudes para probar páginas de BadSSL.com

curl -X GET https://wrong.host.badssl.com/
curl: (51) SSL: no alternative certificate subject name matches target host name 'wrong.host.badssl.com'

curl -k -X GET https://wrong.host.badssl.com/
..returns HTML content...
Freiheit
fuente
11
Me encanta el hecho de que tiene una opción corta de una letra
kizzx2
¿Hay alguna forma en curl config para hacer que esta opción sea predeterminada?
Gana el
44
@Wins, esa sería una idea horrible. Corrija un alias si necesita usarlo repetidamente, para que sepa lo que hace y no envíe accidentalmente sus contraseñas sin cifrar. alias insecure-curl="curl -k"
Alexander Huszagh
2
@AlexanderHuszagh En el trabajo, solo uso curl desde un único servidor con un certificado autofirmado; nunca hay un momento en que quiera hacer una verificación completa del certificado. El hecho de que algo parezca una idea horrible en la mayoría de los casos no significa que siempre lo sea.
Daniel H
44
@DanielH Es por eso que sugerí un alias: para obtener la mayor comodidad con el conocimiento explícito de que es inseguro. Los flujos de trabajo cambian: sin embargo, aún debe saber de manera limitada cuándo está intercambiando seguridad por conveniencia.
Alexander Huszagh
36

Puede usar el siguiente comando para aplicar los cambios para todas las conexiones:

$ echo insecure >> ~/.curlrc

En Windows acaba de crear _curlrcun archivo de texto con el texto 'insegura' en ella en su %HOME%, %CURL_HOME%, %APPDATA%, %USERPROFILE%o %USERPROFILE%\Application Datadirectorio.

La ventaja de usar la solución anterior es que funciona para todos los curlcomandos, pero no se recomienda ya que puede introducir ataques MITM al conectarse a hosts inseguros y no confiables.

kenorb
fuente
72
Esto parece un mal consejo: deshabilitar estas comprobaciones para todas las conexiones no debería ser el valor predeterminado, incluso si se hace esto a través de la configuración por usuario. Si necesita suprimir los controles de seguridad, al menos hágalo poco a poco.
Christopher Schultz
44
Cada vez que uso curl, controlo o confío en la máquina en el otro extremo.
Eric Hartford
11
@EricHartford: Bueno, bien por ti, pero eso todavía no lo convierte en un buen consejo general en mi humilde opinión. Uno podría usar curl, por ejemplo, al descargar homebrew en osx y terminar con una versión modificada de las herramientas porque habilitó esto como valor predeterminado a ciegas.
ereOn
10
También @EricHartford, ¿estás seguro de que siempre haces cosas de curl de confianza? ¿Alguna vez has ejecutado algún script de instalación de bash que obtuviste de internet? De acuerdo, puedes estar en el negro allí de todos modos, pero esto aumenta las posibilidades.
Zlatko
Este es el verdadero @EricHartford. El mensaje anterior fue publicado por otra persona que se hizo pasar por mí. Porque confié en todas las máquinas ;-)
Anand Rockzz
5

Estás utilizando un certificado autofirmado. ¿Por qué no agrega CA a su paquete de CA de confianza (Linux) o lo agrega al almacén de certificados de confianza (Windows)? O simplemente utilícelo --cacert /Path/to/filecon el contenido de su archivo cert autofirmado de confianza.

Las otras respuestas están respondiendo la pregunta en función de lo wgetcomparable. Sin embargo, la verdadera pregunta es cómo mantengo una conexión confiable con un certificado autofirmado curl. Según muchos comentarios, la seguridad es la principal preocupación en cualquiera de estas respuestas, y la mejor respuesta sería confiar en el certificado autofirmado y dejar curlintactos los controles de seguridad.

usuario3258557
fuente