14 votos

Cómo arreglar curl: (60) Certificado SSL: Cadena de certificados no válida al usar sudo

Así que desde la actualización de Mavericks curl tiene más problemas con los certificados.

Al tratar de rizar un archivo de mi servidor web con su certificado autofirmado estaba recibiendo el error "Certificado SSL: Cadena de certificados no válida".

Esto se corrigió añadiendo el certificado a mi llavero del sistema y configurándolo para permitir siempre SSL, información que encontré aquí y aquí .

Esto funciona bien y cuando rizo un archivo se descarga correctamente.

Sin embargo si ejecuto curl con sudo antes (por ejemplo tengo un script que necesita ser ejecutado con sudo y hace un curl en él) entonces vuelvo al mismo mensaje de error.

¿Supongo que Root no lee del llavero del sistema quizás?

¿Alguien sabe cómo arreglar esto?

22voto

Dan Puntos 1161

I almacena sus certificados de CA en el sistema de archivos (en formato PEM) puede decirle a curl que los utilice con

sudo curl --cacert /path/to/cacert.pem ...

También puede desactivar la verificación de certificados con

sudo curl --insecure ...

Edición: Actualizado con respecto a los comentarios

Si quieres establecer esto de forma permanente, debes crear un .curlrc y colóquelo en su directorio principal. sudo los comandos pueden necesitar este archivo en /var/root El archivo toma las mismas opciones que la línea de comandos pero sin los guiones. Una opción por línea:

cacert=/path/to/my/certs.pem

0 votos

Gracias por tu respuesta, el script que se está ejecutando con sudo es de un tercero y por eso no puedo modificar realmente el propio comando curl. Insecure no es realmente una opción. ¿Se puede hacer esto globalmente?

0 votos

Puedes hacer un archivo .curlrc y guardarlo en tu carpeta de inicio, aunque si usas sudo puede que tenga que ser /var/Root/.curlrc. El archivo debe contener opciones sin guiones, una por línea. Así que " cacert=/ruta/a/mi/certs.pem "

1 votos

+1 para la creación de un root -disponible .curlrc en lugar de --insecure . Lo cual es exactamente lo que dice: para un atacante en la posición de la red para hacerlo, sería trivial hacer MITM e inyectar código.

6voto

user4774 Puntos 108

Root no lee la configuración de confianza del usuario actual, pero hay una configuración de confianza del administrador y una configuración de confianza específica del usuario Root. (Estos también son distintos de los sistema de confianza). Tenga en cuenta, además, que la configuración de la confianza de los certificados es algo distinto a la simple adición de un certificado a un llavero; puede marcar un certificado como de confianza sin añadirlo completamente. (La situación exacta aquí no está clara para mí, y los documentos que he visto son vagos).

Puede marcar un cert como de confianza para su usuario actual como

$ security add-trusted-cert /path/to/cert.pem

pero eso no ayuda con Root. La solución, como puede adivinar ahora, es sudo lo anterior, que luego lo marca como de confianza para el usuario Root específicamente:

$ sudo security add-trusted-cert /path/to/cert.pem

o para utilizar el -d para añadirlo a la configuración de confianza del administrador:

$ security add-trusted-cert -d /path/to/cert.pem

(OS X mostrará un cuadro de diálogo con la contraseña para confirmarla).

Cualquiera de los dos últimos parece ser suficiente para sudo curl .

Referencia: https://developer.apple.com/library/mac/Documentation/Darwin/Reference/ManPages/man1/security.1.html

0 votos

Como he dicho en la pregunta ya los he añadido al llavero del sistema así como al llavero de inicio de sesión.

0 votos

¿Realmente intentaste lo que te sugerí? Lo he probado, exactamente en la situación que describes, y ha funcionado. No tengo claro todos los detalles - la documentación es vaga - pero deberías saber que la configuración de la confianza del certificado NO es sinónimo de simplemente añadir el certificado a un llavero, y que la configuración de la confianza del certificado del administrador existe por separado de la configuración/llaveros del sistema y del usuario. (También parece haber un conjunto de configuraciones de usuario específicas del usuario Root en la mezcla). He editado mi respuesta para ser más claro en este punto. Por favor, prueba esta solución.

0 votos

Sí, probé esta solución cuando la publicaste por primera vez. Los certificados están en el llavero del sistema y configurados como de confianza. Todavía no hay suerte.

6voto

zinking Puntos 121

Esto es realmente en la pista de salida:

echo insecure >> ~/.curlrc

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

2voto

Ibrahim Puntos 1

Si usas MacPorts (y el script de terceros que mencionas no lo elimina de $PATH o llamadas /usr/bin/curl ) puede instalar el certsync y curl puertos en este orden.

certsync es una herramienta y su correspondiente plist de launchd que exportará su llavero del sistema a $prefix/etc/openssl/cert.pem e instalar un enlace simbólico $prefix/share/curl/curl-ca-bundle.crt -> $prefix/etc/openssl/cert.pem para que el curl de MacPorts recoja automáticamente los certificados. certsync también actualizará automáticamente los archivos generados cuando cambies el llavero del sistema.

0 votos

Gracias por esto, aunque me gustaría evitar el uso de MacPorts si es posible.

-1voto

Rob Dickerson Puntos 758

Una forma de solucionarlo es dejar que curl no se tiene en cuenta la comprobación de la cadena de certificados:

$ sudo curl -k https://example.com

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X