2012-03-26 39 views
16

Cuándo se usaría la opción --cacert frente a la opción --capath dentro de curl (CLI es decir).Diferencia entre --cacert y --capath en curl?

--cacert parece hacer referencia a un archivo monolítico que contiene múltiples PEM. ¿Asume que explora para encontrar el nombre de host coincidente?

--capath parece hacer referencia a un directorio en el que viven varios archivos. ¿Curl recoge el certificado apropiado como un nombre de archivo?

Respuesta

15

Desde el docs:

--cacert (HTTPS) Indica rizo para utilizar el archivo de certificado especificado para verificar los pares. El archivo puede contener múltiples certificados de CA. El certificado debe estar en formato PEM. Si esta opción se usa varias veces , se usará la última.

- capacidad (HTTPS) Indica a curl que utilice el directorio de certificados 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 symbolink para crearlos). Usar --capath puede permitir que curl haga conexiones https mucho más eficientemente que usando --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 de 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 utiliza para especificar un directorio que contiene los certificados de CA en lugar de un único archivo. La utilidad c_rehash se debe usar 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 --certificar un único archivo 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 las dos opciones que se debe tener cuidado para incluir sólo certificados de CA de las CA de confianza. Si, por ejemplo, sabe que los servidores remotos siempre deben tener certificados de YourCompanyCA, este es el único certificado de CA que debe incluir.

+0

qué más eficiente? ¿Porque puede buscar el certificado a través del nombre del archivo? – Xailor

+0

@Xepoch Sí, creo que crea archivos con el hash del nombre del sujeto de cada certificado y luego vincula estos archivos hash al certificado original. Esto hace que las búsquedas sean más rápidas. He agregado una pequeña secuencia de comandos que probablemente hace lo que hace c_rehash para tal vez hacerlo más claro. – PhilR

+0

Dado que Ubuntu tiene un directorio de certificados ca, si quiero descargar el más reciente ca-bundle.crt del sitio web de Curl Haxx, ¿qué debería hacer? ¿Simplemente soltando el archivo en el directorio y ejecutando ese comando? ¿O hay alguna configuración específica de ubuntu requerida? – CMCDragonkai

1

En Windows, puede ejecutar lo siguiente como un archivo por lotes y pase el nombre de la carpeta 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