El problema surge porque OS X no mantiene sus certificaciones de CA en el sistema de archivos; viven en el llavero "Raíces del Sistema". Puedes verlas con la aplicación Keychain Access (que se encuentra en tu carpeta Aplicaciones/Utilidades).
Para aquellas herramientas que no saben cómo hablar con el llavero (como el rizo), puedes exportar estos certificados a una carpeta de tu elección, digamos /etc/ssl/certs
para ser consistente con la mayoría de las distribuciones de linux. Puedes arrastrarlos y soltarlos desde Keychain Access a una ventana del buscador, o seleccionarlos y elegir "Exportar elementos..." del menú de archivos. Con arrastrar y soltar siempre parece que se usa el binario .cer
mientras que la mayoría de las herramientas CLI quieren PEM codificado en base64 (comúnmente usando el .crt
extensión de archivo). Se puede exportar en formato pem desde el acceso de llavero, pero parece que sólo se exporta un cert a la vez, incluso si se han seleccionado varios certs. Para solucionar esto, escribí un bash script para convertir por lotes los archivos .cer a formato PEM .crt:
#!/bin/bash
#Convert all .cer files in this folder into PEM format .crt files
shopt -s nullglob
for f in *.cer
do
openssl x509 -inform der -in "${f}" -outform pem -out "${f%.*}.crt"
rm "$f"
done
chmod 444 *crt
Para usarlo, haz una carpeta, pon esto script en ella (lo llamé cerconv.sh
), arrastra y suelta todos tus certificados de CA root en él, abre una terminal en esa carpeta y simplemente ejecuta bash cerconv.sh
.
Para evitar que las cosas nefastas cambien tus certificaciones de CA, añadí una línea a chmod
todos ellos como sólo de lectura.
Todo esto puede ser innecesario - ciertamente no tengo problemas con git(hub), homebrew, curl etc sin tener que hacer esto, y lo he hecho durante años - pero al menos ahora sabes cómo obtener las certificaciones.
Este enfoque es mejor que usar -k
en rizo porque no estás comprometiendo tu seguridad.
Actualización : Acabo de descubrir el security
en OS X. Aquí hay un comando que lo usa para exportar todos los certificados de su llavero del sistema en un solo archivo .pem que debería ser utilizable con curl:
security export -p -t certs -k `security list-keychains -d system|cut -d '"' -f 2` -o certs/certs.pem