curl报错35:SSL连接失败怎么办?

curl报错35:SSL连接失败怎么办?
最新回答
白首不渝

2026-03-27 11:11:24

curl报错35通常表示SSL连接失败,主要与SSL证书验证问题相关,可通过升级软件、校准系统时间、验证服务器证书或(临时)忽略验证来解决。 以下是具体分析和解决方法:

一、错误原因分析
  • 软件版本过旧:过时的curl或OpenSSL库可能无法兼容最新的SSL协议或证书格式,导致验证失败。例如,旧版本可能不支持TLS 1.2/1.3或某些新型证书链。

  • 系统时间错误:SSL证书包含有效期(起止时间),若系统时间不准确(如时间滞后或超前),证书会被判定为“未生效”或“已过期”,从而触发验证失败。

  • 服务器证书问题:目标服务器的SSL证书可能存在以下问题:

    过期:证书已超过有效期。

    链路不完整:中间证书缺失,导致证书链无法完整验证。

    被吊销:证书因泄露或违规被CA吊销。

    域名不匹配:证书中的域名与访问的URL不一致(如使用了通配符证书但未覆盖子域名)。

二、解决方法
  • 升级curl和OpenSSL:更新到最新版本可修复已知的SSL兼容性问题。

    Debian/Ubuntu系统:sudo apt update && sudo apt upgrade curl openssl

    CentOS/RHEL系统:sudo yum update curl openssl

    macOS(Homebrew):brew update && brew upgrade curl openssl

  • 校准系统时间:确保系统时间与网络时间同步。

    Linux系统(使用NTP服务):sudo timedatectl set-ntp true # 启用NTP同步sudo timedatectl status # 检查状态

    手动设置时间(临时):sudo date -s "YYYY-MM-DD HH:MM:SS" # 替换为当前时间

    Windows系统:通过“控制面板 > 日期和时间 > 互联网时间”选项卡,选择“更改设置”并同步。

  • 验证服务器证书:

    直接访问目标URL:使用浏览器访问目标URL,检查证书是否显示为“有效”。若浏览器提示证书错误,说明服务器配置存在问题。

    使用OpenSSL命令检查:openssl s_client -connect example.com:443 -showcerts # 替换为实际域名输出中需关注:

    证书有效期(Not Before/Not After)。

    证书链是否完整(从服务器证书到根CA的完整路径)。

    域名是否匹配(Subject Alternative Name字段)。

    联系服务器管理员:若证书过期、被吊销或链路不完整,需由服务器管理员重新签发或配置证书。

  • 忽略SSL证书验证(仅限调试):不推荐在生产环境中使用,但可用于临时测试。

    curl --insecure
    https://example.com
    # 忽略证书验证

    或通过-k参数(同--insecure):

    curl -k
    https://example.com
三、其他建议
  • 检查curl命令参数:确保未错误指定证书路径(如--cacert参数指向了无效文件)。
  • 使用详细模式调试:添加-v参数查看SSL握手过程的详细信息:curl -v
    https://example.com
    输出中搜索SSL routines或certificate verify failed等关键词,定位具体失败点。
  • 更换网络环境测试:某些网络(如公司内网)可能拦截或修改SSL流量,导致验证失败。尝试切换到其他网络(如手机热点)测试。
四、总结
  1. 优先升级curl和OpenSSL,确保兼容性。
  2. 校准系统时间,避免因时间错误导致证书失效。
  3. 验证服务器证书,确认其有效性及配置正确性。
  4. 仅在调试时忽略验证,并明确标注风险。

若问题仍未解决,请提供以下信息以便进一步诊断:

  • 完整的curl命令(隐藏敏感信息)。
  • curl -v输出的错误片段。
  • 目标服务器的域名及端口。