web-dev-qa-db-fra.com

Différence entre --cacert et --capath en boucle?

Quand utiliserait-on le --cacert option vs --capath option dans curl (CLI c'est-à-dire).

--cacert semble faire référence à un fichier monolithique contenant plusieurs PEM. Supposons qu'il analyse à travers pour trouver le nom d'hôte correspondant?

--capath semble référencer un répertoire dans lequel vivent plusieurs fichiers. Curl récupère-t-il le certificat approprié comme nom de fichier?

23
Jé Queue

De la docs :

--cacert (HTTPS) Indique à curl d'utiliser le fichier de certificat spécifié pour vérifier l'homologue. Le fichier peut contenir plusieurs certificats CA. Le ou les certificats doivent être au format PEM. Si cette option est utilisée plusieurs fois, la dernière sera utilisée.

--capath (HTTPS) Indique à curl d'utiliser le répertoire de certificats spécifié pour vérifier l'homologue. Les certificats doivent être au format PEM et le répertoire doit avoir été traité à l'aide de l'utilitaire c_rehash fourni avec openssl. Les répertoires de certificats ne sont pas pris en charge sous Windows (car c_rehash utilise des liens symbolink pour les créer). L'utilisation de --capath peut permettre à curl d'établir des connexions https beaucoup plus efficacement que d'utiliser --cacert si le fichier --cacert contient de nombreux certificats d'autorité de certification. Si cette option est utilisée plusieurs fois, la dernière sera utilisée.

Ainsi, si vous spécifiez --cacert, les certificats CA sont stockés dans le fichier spécifié. Ces certificats CA sont utilisés pour vérifier les certificats des serveurs distants auxquels cURL se connecte.

L'option --capath est utilisée pour spécifier un répertoire contenant les certificats CA plutôt qu'un seul fichier. L'utilitaire c_rehash doit être utilisé pour préparer le répertoire, c'est-à-dire créer les liens nécessaires. Le principal avantage de l'utilisation de --capath semble être qu'il est plus efficace que l'approche de fichier unique --cacert si vous avez plusieurs certificats CA.

Voici un script qui fait probablement ce que c_rehash fait:

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

Avec les deux options, vous devez faire attention à n'inclure que les certificats d'autorité de certification des autorités de confiance. Si, par exemple, vous savez que les serveurs distants doivent toujours recevoir des certificats de YourCompanyCA, il s'agit du seul certificat CA à inclure.

25
PhilR

Sous Windows, vous pouvez exécuter ce qui suit en tant que fichier de commandes et transmettre le nom du dossier 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^>

Exemple:

c_rehash c:\cacerts
1
Darrek