Разница между --cacert и --capath в curl? - PullRequest
22 голосов
/ 27 марта 2012

Когда можно использовать опцию --cacert против опции --capath в curl (то есть CLI).

--cacert, по-видимому, ссылается на монолитный файл, который содержит несколько PEM. Предполагается, что он просматривает, чтобы найти подходящее имя хоста?

--capath указывает на каталог, в котором находятся несколько файлов. Собирает ли curl соответствующий сертификат в качестве имени файла?

Ответы [ 2 ]

24 голосов
/ 27 марта 2012

Из документов :

- cacert (HTTPS) Указывает curl использовать указанный файл сертификата для проверки однорангового узла.Файл может содержать несколько сертификатов CA.Сертификат (ы) должен быть в формате PEM.Если эта опция используется несколько раз, будет использоваться последняя.

- capath (HTTPS) Указывает curl использовать указанный каталог сертификатов для проверки однорангового узла.Сертификаты должны быть в формате PEM, а каталог должен быть обработан с использованием утилиты c_rehash, поставляемой с openssl.Каталоги сертификатов не поддерживаются в Windows (потому что c_rehash использует ссылки Symbolink для их создания).Использование --capath может позволить curl устанавливать соединения https гораздо эффективнее, чем --cacert, если файл --cacert содержит много сертификатов CA.Если эта опция используется несколько раз, будет использоваться последняя.

Таким образом, если вы укажете --cacert, сертификаты CA сохранятся в указанном файле.Эти сертификаты CA используются для проверки сертификатов удаленных серверов, к которым подключается cURL.

Параметр --capath используется для указания каталога, содержащего сертификаты CA, а не одного файла.Для подготовки каталога следует использовать утилиту c_rehash, то есть создать необходимые ссылки.Основное преимущество использования --capath может заключаться в том, что он более эффективен, чем подход с одним файлом --cacert, если у вас много сертификатов CA.

Вот скрипт, который, вероятно, выполняет то же, что и c_rehash:

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

В обоих вариантах следует соблюдать осторожность, чтобы включать сертификаты CA только из тех CA, которым вы доверяете.Например, если вы знаете, что на удаленные серверы всегда должны выдаваться сертификаты от YourCompanyCA, то это единственный сертификат CA, который вы должны включить.

1 голос
/ 16 февраля 2018

В Windows вы можете запустить следующее как пакетный файл и передать имя папки 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^>

Пример:

c_rehash c:\cacerts
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...