谷桐羽 2025-08-15 08:30 采纳率: 98.1%
浏览 46
已采纳

问题:`curl: (35) OpenSSL SSL_connect: 连接被对方重置 in connection to 192.168.0.13` 是什么原因导致的?

问题:`curl: (35) OpenSSL SSL_connect: 连接被对方重置 in connection to 192.168.0.13` 是什么原因导致的? 该问题是使用 `curl` 命令访问 HTTPS 服务时常见的错误,通常发生在 SSL/TLS 握手阶段。主要原因包括:服务器端突然中断连接、SSL/TLS 版本或加密套件不兼容、服务器证书异常、中间设备(如防火墙、代理)拦截连接,或服务端程序异常终止。此外,客户端使用的 OpenSSL 版本与服务端不兼容也可能引发此问题。排查时应检查服务端状态、SSL 配置、网络环境及证书有效性,确保两端协议一致。
  • 写回答

1条回答 默认 最新

  • Airbnb爱彼迎 2025-08-15 08:30
    关注

    一、问题现象

    在使用 curl 命令访问 HTTPS 服务时,出现如下错误信息:

    curl: (35) OpenSSL SSL_connect: 连接被对方重置 in connection to 192.168.0.13

    该错误通常发生在 curl 尝试与目标服务器建立 SSL/TLS 连接的过程中,连接在握手阶段被中断,导致连接失败。

    二、常见原因分析

    该错误的成因较为复杂,涉及多个层面。以下是常见的几种原因:

    • 服务器端异常中断连接:服务端在 SSL 握手过程中主动关闭连接(如服务崩溃、超时、配置错误)。
    • SSL/TLS 协议版本不兼容:客户端与服务端支持的协议版本不同(如客户端使用 TLS 1.1,而服务端只支持 TLS 1.2 及以上)。
    • 加密套件不匹配:客户端和服务器没有共同支持的加密算法。
    • 证书问题:服务器证书无效、过期、自签名未被信任或证书链不完整。
    • 中间设备干扰:如防火墙、代理、NAT、负载均衡器等设备拦截或修改了 SSL 流量。
    • OpenSSL 版本差异:客户端使用的 OpenSSL 版本与服务端不兼容,导致协议解析失败。
    • 服务端程序异常终止:如 Nginx、Apache、Tomcat 等服务进程异常退出。

    三、排查与诊断方法

    为了准确诊断该问题,建议采用以下排查步骤:

    步骤操作目的
    1确认服务端是否正常运行检查服务端进程状态、日志、端口监听情况
    2使用 openssl s_client -connect 192.168.0.13:443 测试连接查看 SSL 握手过程中的详细输出
    3检查服务端 SSL/TLS 配置如使用 Nginx/Apache,查看 ssl_protocolsssl_ciphers
    4使用 curl -v https://192.168.0.13 获取详细日志观察连接建立过程中的具体失败点
    5检查客户端 OpenSSL 版本运行 openssl version 并与服务端对比
    6尝试不同 TLS 版本使用 curl --tlsv1.2 https://192.168.0.13 指定协议版本
    7检查证书有效性使用 openssl x509 -in cert.pem -text -noout 查看证书详情

    四、解决方案建议

    根据不同的排查结果,可以采取以下解决方案:

    1. 服务端问题:重启服务进程,确保端口监听正常,检查服务日志是否有异常。
    2. SSL/TLS 不兼容:升级 OpenSSL 客户端或服务端配置,确保双方支持相同协议版本。
    3. 加密套件不匹配:调整服务端 ssl_ciphers 配置,确保包含客户端支持的加密套件。
    4. 证书问题:更新证书、安装中间 CA、使用 --insecure 参数临时绕过证书验证(仅用于测试)。
    5. 中间设备干扰:关闭防火墙、代理,或使用 tcpdump 抓包分析流量。
    6. OpenSSL 版本问题:升级 OpenSSL 至最新版本,或使用 curl -V 查看支持的协议。

    五、流程图:错误排查路径

                graph TD
                    A[开始] --> B[服务端是否运行正常?]
                    B -->|是| C[检查 SSL/TLS 配置]
                    B -->|否| D[启动服务并重试]
                    C --> E[客户端与服务端协议是否一致?]
                    E -->|是| F[检查证书是否有效]
                    E -->|否| G[调整协议版本]
                    F -->|有效| H[检查加密套件是否匹配]
                    H -->|是| I[访问成功]
                    H -->|否| J[调整加密套件]
                    F -->|无效| K[更新证书或临时跳过验证]
                    K --> L[访问成功]
            
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 10月23日
  • 创建了问题 8月15日