何时使用--cacert
选项与--capath
中的curl
选项(CLI即可)。
--cacert
似乎引用了包含多个PEM的单片文件。假设它扫描一下,找到匹配的主机名?
--capath
似乎引用了多个文件所在的目录。卷曲是否将适当的证书作为文件名取出?
答案 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