curl 错误 35:无法接收握手,SSL/TLS 连接失败

curl error 35 : failed to receive handshake, SSL/TLS connection failed

当我尝试执行此 curl 命令时:

curl -v --key some_key_file.key --cert certificate_file.pem --show-error --header "Content-Type: application/json;charset=UTF-8" https://some-api/service

我收到以下错误:curl: (35) schannel: 无法接收握手,SSL/TLS 连接失败

以及完整的执行日志:

我在网上搜索了这个错误,但没有找到任何人解释它的真正含义。

原来问题出在我的 curl 版本上,出于某种原因,它不接受参数 --cert 和 --key。

为了解决这个问题,我安装了一个全新的 curl 版本,运行 它从 instllation 文件夹中安装了它并且它起作用了。

我也尝试安装最新的 curl(如下所示),但它没有解决我的问题。

curl 7.77.0 (x86_64-pc-win32) libcurl/7.77.0 OpenSSL/1.1.1k (Schannel) zlib/1.2.11 brotli/1.0.9 zstd/1.5.0 libidn2/2.3.1 libssh2/1.9.0 nghttp2/1.43.0 libgsasl/1.10.0 Release-Date: 2021-05-26 Protocols: dict file ftp ftps gopher gophers http https imap imaps ldap ldaps mqtt pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp Features: alt-svc AsynchDNS brotli gsasl HSTS HTTP2 HTTPS-proxy IDN IPv6 Kerberos Largefile libz MultiSSL NTLM SPNEGO SSL SSPI TLS-SRP Unicode UnixSockets zstd

运行 来自 curl 包所在路径的命令。 如果你放在 c:\curl goto this path 和 运行 curl 命令它会工作。

修复了从 https 中删除 's'。

当您位于仅允许通过应用程序进行 SSL 连接的 7 层防火墙(即 Palo Alto)后面时,会发生此错误,因此您必须在此类解决方案中配置 2 条规则。

  1. 允许 443 或任何具有更高优先级的端口
  2. 允许优先级较低的应用程序 SSL