2012-03-26 13 views
16

Quando si utilizza l'opzione --cacert rispetto all'opzione --capath all'interno di curl (CLI).Differenza tra --cacert e --capath in curl?

--cacert sembra fare riferimento a un file monolitico che contiene più PEM. Supponiamo che esegua la scansione per trovare il nome host corrispondente?

--capath sembra fare riferimento a una directory in cui vivono più file. Il ricciolo raccoglie il certificato appropriato come un nome file in esso?

risposta

15

Dal docs:

--cacert (HTTPS) Indica curl per utilizzare il file certificato specificato per verificare il peer. Il file può contenere più certificati CA. I certificati devono essere in formato PEM. Se questa opzione viene utilizzata più volte , verrà utilizzato l'ultimo.

--capath (HTTPS) Indica al ricciolo di utilizzare la directory del certificato specificata per verificare il peer. I certificati devono essere in formato PEM e la directory deve essere stata elaborata utilizzando l'utilità c_rehash fornita con con openssl. Le directory dei certificati non sono supportate in Windows (poiché c_rehash utilizza i collegamenti symbolink per crearle). L'utilizzo di --capath può consentire a curl di realizzare connessioni https in modo molto più efficiente rispetto a utilizzando --cacert se il file --cacert contiene molti certificati CA. Se questa opzione viene utilizzata più volte, verrà utilizzata l'ultima.

Quindi, se si specifica --cacert, i certificati CA sono memorizzati nel file specificato. Questi certificati CA vengono utilizzati per verificare i certificati dei server remoti a cui si connette cURL.

L'opzione --capath viene utilizzata per specificare una directory contenente i certificati CA anziché un singolo file. L'utilità c_rehash dovrebbe essere utilizzata per preparare la directory, ad esempio, creare i collegamenti necessari. Il vantaggio principale dell'utilizzo di --capath sembrerebbe essere più efficiente rispetto all'approccio con un singolo file --cacert se si dispone di molti certificati CA.

Ecco uno script che probabilmente fa quello che fa c_rehash:

for file in *.pem; do ln -s $file `openssl x509 -hash -noout -in $file`.0; done 

Con entrambe le opzioni che si deve fare attenzione ad includere solo i certificati CA dalla CA di fiducia. Se, ad esempio, sai che i server remoti dovrebbero sempre essere emessi con certificati da YourCompanyCA, allora questo è l'unico certificato CA che dovresti includere.

+0

Perché più efficiente? Perché può cercare il certificato tramite il nome del file system? – Xailor

+0

@Xepoch Sì, penso che crei file con l'hash del nome soggetto di ogni certificato e quindi collega questi file hash al certificato originale. Questo rende le ricerche più veloci. Ho aggiunto un piccolo script che probabilmente fa ciò che c_rehash fa per renderlo più chiaro. – PhilR

+0

Dato che Ubuntu ha una directory con certificato ca, se voglio scaricare il più recente ca-bundle.crt dal sito Web di Curl Haxx, allora cosa dovrei fare? Basta trascinare il file nella directory ed eseguire quel comando? O è richiesta una configurazione specifica per Ubuntu? – CMCDragonkai

1

Su Windows è possibile eseguire il seguente come un file batch e passare il nome della cartella 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^> 

Esempio:

c_rehash c:\cacerts