curl中--cacert和--capath之间的区别?

时间:2012-03-26 20:53:49

标签: ssl curl ssl-certificate

何时使用--cacert选项与--capath中的curl选项(CLI即可)。

--cacert似乎引用了包含多个PEM的单片文件。假设它扫描一下,找到匹配的主机名?

--capath似乎引用了多个文件所在的目录。卷曲是否将适当的证书作为文件名取出?

2 个答案:

答案 0 :(得分:23)

来自docs

  

- cacert(HTTPS)告诉curl使用指定的证书文件来验证对等方。该文件可能包含多个CA证书。该   证书必须采用PEM格式。如果这个选项使用了几个   次,最后一个将被使用。

     

- capath(HTTPS)告诉curl使用指定的证书目录来验证对等方。证书必须是PEM格式,并且   必须使用提供的c_rehash实用程序处理目录   用openssl。 Windows不支持证书目录   (因为c_rehash使用符号链接来创建它们)。使用--capath   可以允许curl更有效地进行https连接   如果--cacert文件包含许多CA证书,则使用--cacert。如果   此选项多次使用,最后一个将被使用。

因此,如果指定--cacert,则CA证书将存储在指定的文件中。这些CA证书用于验证cURL连接到的远程服务器的证书。

--capath选项用于指定包含CA证书而不是单个文件的目录。应使用c_rehash实用程序来准备目录,即创建必要的链接。使用--capath的主要好处似乎是它比它更有效 - 如果您有许多CA证书,则采用单一文件方法。

这是一个可能执行c_rehash所做的脚本:

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

使用这两个选项时,您应该注意只包括您信任的CA的CA证书。例如,如果您知道远程服务器应始终使用YourCompanyCA的证书颁发,那么这是您应该包含的唯一CA证书。

答案 1 :(得分:1)

在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