Entonces, dado que la actualización de Mavericks, curl tiene más problemas con los certificados.
Al intentar curvar un archivo de mi servidor web con su certificado autofirmado, recibía el error "Certificado SSL: cadena de certificados no válida".
Esto se corrigió agregando el certificado al llavero de mi sistema y configurándolo para permitir siempre SSL, información que encontré aquí y aquí .
Esto funciona bien y cuando curvo un archivo se descarga correctamente.
Sin embargo, si ejecuto curl con sudo antes (por ejemplo, tengo un script que debe ejecutarse con sudo y hace un curl en él), vuelvo al mismo mensaje de error.
¿Supongo que la raíz no lee desde el llavero del sistema tal vez?
¿Alguien sabe una manera de arreglar esto?
Si almacena sus certificados de CA en el sistema de archivos (en formato PEM), puede decirle a curl que los use con
sudo curl --cacert /path/to/cacert.pem ...
También puede desactivar la verificación del certificado con
sudo curl --insecure ...
Editar: actualizado con respecto a los comentarios
Si desea configurar esto de forma permanente, debe crear un .curlrc
archivo y colocarlo en su directorio de inicio. sudo
los comandos pueden necesitar este archivo en /var/root
El archivo tiene las mismas opciones que la línea de comando pero sin los guiones. Una opción por línea:
cacert=/path/to/my/certs.pem
Root no lee la configuración de confianza del usuario actual, pero hay configuraciones de confianza de administrador y configuraciones de confianza específicas del usuario root. (Estos también son distintos de la configuración de confianza del sistema ). Tenga en cuenta, también, que la configuración de confianza del certificado es algo distinta de simplemente agregar un certificado a un llavero; puede marcar un certificado como confiable sin agregarlo por completo. (La situación exacta aquí no está clara para mí, y los documentos que he visto son vagos).
Puede marcar un certificado como de confianza para su usuario actual como
$ security add-trusted-cert /path/to/cert.pem
pero eso no ayuda con la raíz. La solución, como ahora puede adivinar, es cualquiera de sudo
las anteriores, que luego lo marcan como de confianza para el usuario raíz específicamente:
$ sudo security add-trusted-cert /path/to/cert.pem
o para usar la -d
bandera para agregarla 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 de contraseña para confirmar esta).
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
Esto es realmente en la sugerencia de salida:
echo insecure >> ~/.curlrc
La ventaja de usar la solución anterior es que funciona para todos los curl
comandos, pero no se recomienda ya que puede introducir ataques MITM al conectarse a hosts inseguros y que no son de confianza.
Si usa MacPorts (y el script de terceros que mencionó no lo elimina $PATH
ni llama /usr/bin/curl
a ), puede instalar los puertos certsync
y en este orden.curl
certsync
es una herramienta y un plist de inicio correspondiente que exportará el llavero de su sistema $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 MacPorts curl recoja automáticamente los certificados. certsync
también actualizará automáticamente los archivos generados cuando cambie el llavero de su sistema.
La documentación que buscas está aquí. Explica cómo usar cURL en Mavericks y cómo proporcionar sus certificados: http://curl.haxx.se/mail/archive-2013-10/0036.html
Para que sudo curl
funcione (en OSX Sierra), tuvimos que importar el certificado a System.keychain
y confiar allí. Esto se puede hacer manualmente en la aplicación de llavero o usando este comando:
sudo security add-trusted-cert -d -k /Library/Keychains/System.keychain /path/to/cert.pem
Era importante especificar -d
y configurar manualmente la ruta al llavero del sistema -k
para asegurarse de que el certificado realmente se importe allí si aún no lo ha hecho.
El comando funciona sin sudo
, pero luego solicitaría la contraseña a través de un cuadro de diálogo de la interfaz de usuario, lo que podría ser un obstáculo para los scripts.
SecCertificateCreateFromData: Unknown format in import.
jacob tomlinson
Dan
zigg
root
-disponible.curlrc
en lugar de--insecure
. Que es exactamente como dice: para que un atacante en la posición de la red lo haga, sería trivial para MITM e inyectar código.jacob tomlinson