que - curl:(77) problem with the ssl ca cert(path? access rights?)
¿Diferencia entre--cacert y--capath en curl? (2)
De la docs :
--cacert (HTTPS) Le dice a curl que use el archivo de certificado especificado para verificar el par. El archivo puede contener múltiples certificados de CA. Los certificados deben estar en formato PEM. Si esta opción se usa varias veces, se usará la última.
--capath (HTTPS) Le dice a curl que use el directorio de certificado especificado para verificar el par. Los certificados deben estar en formato PEM, y el directorio debe haberse procesado utilizando la utilidad c_rehash suministrada con openssl. Los directorios de certificados no son compatibles con Windows (porque c_rehash usa enlaces de símbolos para crearlos). El uso de --capath puede permitir que Curl realice conexiones https de manera mucho más eficiente que usar --cacert si el archivo --cacert contiene muchos certificados de CA. Si esta opción se usa varias veces, se usará la última.
Por lo tanto, si especifica --cacert, los certificados CA se almacenan en el archivo especificado. Estos certificados de CA se utilizan para verificar los certificados de servidores remotos a los que se conecta cURL.
La opción --capath se usa para especificar un directorio que contiene los certificados CA en lugar de un solo archivo. La utilidad c_rehash se debe utilizar para preparar el directorio, es decir, crear los enlaces necesarios. El principal beneficio de usar --capath parece ser que es más eficiente que el enfoque de archivo único --cacert si tiene muchos certificados de CA.
Aquí hay un script que probablemente hace lo que hace c_rehash:
for file in *.pem; do ln -s $file `openssl x509 -hash -noout -in $file`.0; done
Con ambas opciones, debe tener cuidado de incluir solo certificados de CA de las CA en las que confía. Si, por ejemplo, sabe que los servidores remotos siempre deben recibir certificados de YourCompanyCA, entonces este es el único certificado de CA que debe incluir.
¿Cuándo se usaría la opción --cacert
frente a la opción --capath
dentro de curl
(CLI?).
--cacert
parece hacer referencia a un archivo monolítico que contiene varios PEM. ¿Asumir que se escanea para encontrar el nombre de host correspondiente?
--capath
parece hacer referencia a un directorio en el que viven varios archivos. ¿Curl recoge el certificado apropiado como un nombre de archivo en él?
En Windows puede ejecutar lo siguiente como un archivo por lotes y pasar el nombre de la carpeta de Capath:
c_rehash.cmd:
@echo off
setlocal enableextensions enabledelayedexpansion
if /%1/ EQU // goto :usage
pushd %1
if NOT ERRORLEVEL 0 goto :usage
del *.0
for %%I in (*.pem) do call :hash %%I
popd
goto :eof
:hash
for /F "usebackq" %%J in (`openssl x509 -in %1 -hash -noout`) do mklink %%J.0 %1
goto :eof
:usage
echo Usage:
echo.
echo Rehash a folder of x509 Certificates for Curl
echo.
echo %~n0 ^<Folder^>
Ejemplo:
c_rehash c:/cacerts