El problema surge porque OS X no mantiene sus certificados de CA en el sistema de archivos; Viven en el llavero "Raíces del sistema". Puede verlos con la aplicación Keychain Access (que se encuentra en la carpeta Aplicaciones / Utilidades).
Para aquellas herramientas que no saben cómo hablar con el llavero (como curl), puede exportar estos certificados a una carpeta de su elección, por ejemplo, /etc/ssl/certs
para ser consistente con la mayoría de las distribuciones de Linux. Puede arrastrarlos y soltarlos fuera de Keychain Access en una ventana del buscador, o seleccionarlos y elegir "Exportar elementos ..." en el menú de archivos. Con la función de arrastrar y soltar, parece que siempre se usa el formato binario .cer
, mientras que la mayoría de las herramientas de CLI quieren PEM codificado en base64 (comúnmente utilizando la extensión de archivo .crt
). Puede exportar en formato pem desde el acceso al llavero, pero solo parece exportar un certificado a la vez, incluso si tiene varios certificados seleccionados. Para solucionar esto, escribí un script bash para convertir por lotes .cer a archivos .crt en formato PEM:
#!/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, cree una carpeta, coloque este script (lo llamé cerconv.sh
), arrastre y suelte todos sus certificados de CA raíz, abra un terminal en esa carpeta y simplemente ejecute bash cerconv.sh
.
Para evitar que las cosas malvadas cambien tus certificados de CA, agregué una línea a chmod
ellos todos como solo 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 sabe cómo obtener los certificados.
Este enfoque es mejor que usar -k
en curl porque no estás comprometiendo tu seguridad.
Actualización : acabo de descubrir la utilidad security
en OS X. Aquí hay un comando que lo utiliza para exportar todos los certificados de su llavero del sistema a un único archivo .pem que debería poder usarse con rizo:
security export -p -t certs -k 'security list-keychains -d system|cut -d '"' -f 2' -o certs/certs.pem