禁止curl导致SSL证书文件认证失败,认证过程请开启,并且查看是否禁止限制读取。
SSL证书基于文件认证的说明:https://curl.se/docs/sslcerts.html
如果 curl 构建时支持 Schannel,则 curl 将使用系统原生的 CA 存储进行验证。所有其他 TLS 库默认使用基于文件的 CA 存储。
每个受信任的服务器证书都由证书颁发机构 (CA) 进行数字签名。
在您的本地 CA 存储中,您拥有来自受信任证书颁发机构的证书集合 ,TLS 客户端(如 curl)使用这些证书来验证服务器。
curl 默认会进行证书验证。具体方法是验证签名,并确保证书是为 URL 中提供的服务器名称制作的。
如果您使用由证书存储在存储中的 CA 签名的证书与 HTTPS、FTPS 或其他使用 TLS 的服务器进行通信,那么您可以确定远程服务器确实是它所声称的服务器。
如果远程服务器使用自签名证书,如果您没有安装 CA 证书存储,如果服务器使用由您使用的存储中未包含的 CA 签名的证书,或者如果远程主机是冒充您最喜欢的网站的冒名顶替者,则证书检查将失败并报告错误。
如果您认为验证失败是错误的,请考虑以下部分之一。
告诉 curl不要-k
使用/来验证对等方 --insecure
。
我们强烈建议避免这种情况,即使您最终是为了实验或开发而这样做, 也不要跳过生产中的验证。
获取可以验证远程服务器的 CA 证书,并使用适当的选项在连接时指出此 CA 证书进行验证 - 仅用于此特定传输。
使用 curl 命令行工具:--cacert [file]
如果您使用没有本机 CA 存储的 curl 命令行工具,则可以通过将环境变量设置CURL_CA_BUNDLE
为您选择的路径来指定您自己的 CA 证书文件。 SSL_CERT_FILE
并且SSL_CERT_DIR
也受支持。
如果您在 Windows 上使用 curl 命令行工具,curl 会curl-ca-bundle.crt
在这些目录中按以下顺序搜索 CA 证书文件:
应用程序目录
当前工作目录
Windows 系统目录(例如 C:\Windows\System32)
Windows 目录(例如 C:\Windows)
%PATH% 上的所有目录
curl 8.11.0 添加了一个构建时选项来禁用此搜索行为,并添加了另一个选项来将搜索限制在应用程序的目录中。
在一些环境中,特别是在 Windows 上,您可以要求 curl 在验证证书时使用系统的本机 CA 存储。
使用 curl 命令行工具:--ca-native
。
将服务器的 CA 证书添加到现有的默认 CA 证书存储中。
curl -v
通常,您可以通过查看连接到 HTTPS 站点时显示的详细输出来找出本地 CA 存储的路径。
curl 使用的默认 CA 证书存储区在构建时设置。构建 curl 时,您可以指定您的首选路径。
curl -w %{certs} https://example.com > cacert.pem
证书上有BEGIN CERTIFICATE
和 END CERTIFICATE
标记。
在CA Extract页面下载已转换为 PEM 格式的 Firefox CA 商店版本。该版本始终包含最新的 Firefox 软件包。
如果 curl 是使用 Schannel 构建的,或者被指示使用原生 CA 证书存储,则 curl 将使用操作系统内置的证书。这些证书与“Internet 选项”控制面板(Windows 系统)或“钥匙串访问”应用程序中(macOS 系统)中显示的证书相同。所有自定义的证书安全规则均受支持。
除非禁用对等验证,否则 Schannel 会对证书运行 CRL 检查。
curl 可以将代理的 HTTPS 连接与服务器连接分开进行。此 TLS 连接的处理和验证与服务器连接分开进行,因此,您可以使用--insecure
和 --cacert
来控制证书验证, --proxy-insecure
而不是 和--proxy-cacert
。使用这些选项,您可以确保 TLS 连接和代理的信任与服务器的 TLS 连接完全分离。