You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux服务器cURL访问嵌入式API遇SSL alert 35问题求助

问题描述

我尝试使用cURL访问一台无法修改的Geo卫星调制解调器嵌入式服务器的API。在Mac上使用以下版本的cURL请求可成功:

curl 8.1.2 (x86_64-apple-darwin22.0) libcurl/8.1.2 (SecureTransport) LibreSSL/3.3.6 zlib/1.2.11 nghttp2/1.51.0
Release-Date: 2023-05-30
Protocols: dict file ftp ftps gopher gophers http https imap imaps ldap ldaps mqtt pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: alt-svc AsynchDNS GSS-API HSTS HTTP2 HTTPS-proxy IPv6 Kerberos Largefile libz MultiSSL NTLM NTLM_WB SPNEGO SSL threadsafe UnixSockets

但在Linux服务器上,使用以下版本的cURL时遇到SSL alert 35错误:

curl 7.86.0 (x86_64-pc-linux-gnu) libcurl/7.86.0 OpenSSL/3.0.7 zlib/1.2.13 brotli/1.0.9 zstd/1.5.2 libidn2/2.3.2 libssh2/1.10.0 nghttp2/1.49.0
Release-Date: 2022-10-26
Protocols: dict file ftp ftps gopher gophers http https imap imaps mqtt pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: alt-svc AsynchDNS brotli GSS-API HSTS HTTP2 HTTPS-proxy IDN IPv6 Kerberos Largefile libz NTLM NTLM_WB SPNEGO SSL threadsafe TLS-SRP UnixSockets zstd

执行命令及错误输出:

curl -vvvv -L -k https://192.168.44.1/api/
*   Trying 192.168.44.1:443...
* Connected to 192.168.44.1 (192.168.44.1) port 443 (#0)
* ALPN: offers h2
* ALPN: offers http/1.1
* TLSv1.0 (OUT), TLS header, Certificate Status (22):
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS header, Certificate Status (22):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS header, Unknown (21):
* TLSv1.2 (IN), TLS alert, unsupported certificate (555):
* error:0A000413:SSL routines::sslv3 alert unsupported certificate
* Closing connection 0
curl: (35) error:0A000413:SSL routines::sslv3 alert unsupported certificate

原以为-k参数能完全跳过证书验证,但仍出现该告警,想知道是否有办法屏蔽、忽略或避免此OpenSSL错误。

另外,Mac上的Chrome也无法打开该页面,提示ERR_BAD_SSL_CLIENT_AUTH_CERT,不过可通过Firefox提取到疑似有问题的证书——该证书为GeoSat Modem的自签名证书,有效期至2033年。

解决方案

这个错误并非因为服务器证书不被信任,而是OpenSSL 3.0.x对旧证书的兼容性问题:服务器返回的证书可能使用了过时的签名算法(如MD5)或不符合现代TLS规范的格式,导致OpenSSL直接拒绝处理。-k参数仅能跳过证书信任验证,无法绕过证书格式或算法不支持的问题。

可尝试以下几种解决方法:

  • 指定兼容的TLS版本:服务器可能仅支持旧版TLS,强制cURL使用TLS 1.2或更低版本:

    curl -vvvv -L -k --tls-max 1.2 https://192.168.44.1/api/
    

    或者直接指定TLS版本:

    curl -vvvv -L -k --tlsv1.2 https://192.168.44.1/api/
    
  • 临时调整OpenSSL安全策略:OpenSSL 3.0默认启用了严格的安全策略,可通过环境变量临时降低策略级别:

    OPENSSL_CONF=<(printf "[openssl_init]\nssl_conf = ssl_sect\n[ssl_sect]\nsystem_default = system_default_sect\n[system_default_sect]\nMinProtocol = TLSv1.2\nCipherString = DEFAULT@SECLEVEL=1") curl -vvvv -L -k https://192.168.44.1/api/
    

    该命令临时设置OpenSSL使用TLS 1.2作为最低版本,并将安全级别降至1,允许使用部分旧但可用的算法。

  • 使用基于LibreSSL的cURL:既然Mac上使用LibreSSL的cURL能成功,Linux上可尝试安装或编译基于LibreSSL的cURL版本,LibreSSL对旧证书的兼容性更好。

  • 手动指定信任的证书文件:从Firefox导出服务器证书(保存为PEM格式),然后让cURL指定该证书:

    curl -vvvv -L --cacert /path/to/exported-cert.pem https://192.168.44.1/api/
    

    这种方式比-k更可靠,明确告知cURL信任该证书,避免OpenSSL对未知证书的格式校验问题。

内容的提问来源于stack exchange,提问作者Peter Goldsborough

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 19:12:36