SSL/TLS握手失败:常见问题与解决方案
·
cmd命令执行报错完整如下
C:\WINDOWS\system32>curl -v https://zhongyuele.top/api/banner/getIndexBanner
* Host zhongyuele.top:443 was resolved.
* IPv6: (none)
* IPv4: 8.130.70.131
* Trying 8.130.70.131:443...
* Connected to zhongyuele.top (8.130.70.131) port 443
* schannel: disabled automatic use of client certificate
* ALPN: curl offers http/1.1
* Recv failure: Connection was reset
* schannel: failed to receive handshake, SSL/TLS connection failed
* closing connection #0
curl: (35) Recv failure: Connection was reset
C:\WINDOWS\system32>

你运行的命令是:
curl -v https://zhongyuele.top/api/banner/getIndexBanner
从输出日志来看,已经成功解析域名并连接到服务器 IP 8.130.70.131:443,但在 SSL/TLS 握手阶段失败了:
Recv failure: Connection was reset
schannel: failed to receive handshake, SSL/TLS connection failed
🔍 一、错误分析
| 步骤 | 日志信息 | 含义 |
|---|---|---|
| 域名解析 | Connected to zhongyuele.top (8.130.70.131) port 443 | DNS 解析和 TCP 连接建立成功 |
| SSL 握手开始 | schannel: disabled automatic use of client certificate | 客户端未使用客户端证书(正常) |
| 协议协商 | ALPN: curl offers http/1.1 | 支持 HTTP/1.1 |
| 握手失败 | Recv failure: Connection was reset | SSL/TLS 握手过程中连接被服务器重置 |
总结:TCP 层连接成功了,但 HTTPS 的 SSL/TLS 握手失败,说明问题出在 SSL 配置或 Nginx 配置上。
🧨 二、常见原因与排查建议
✅ 1. Nginx 没有正确配置 SSL/TLS
可能问题:
- SSL 证书路径配置错误
- SSL 证书格式不兼容(如
.pem和.crt混用) - SSL/TLS 协议版本或加密套件配置不当
排查方法:
-
登录服务器检查 Nginx SSL 配置是否完整:
ssl_certificate /etc/nginx/certs/zhongyuele.top.crt; ssl_certificate_key /etc/nginx/certs/zhongyuele.top.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; -
检查证书文件是否存在且可读:
ls -l /etc/nginx/certs/ cat /etc/nginx/certs/zhongyuele.top.crt
✅ 2. SSL 证书不可信或过期
可能问题:
- 使用的是自签名证书
- 证书已过期
- 证书不包含目标域名
zhongyuele.top
排查方法:
- 在浏览器中访问
https://zhongyuele.top,查看是否显示“不安全” - 使用在线工具检测证书有效性:
✅ 3. Nginx 服务异常或配置错误
可能问题:
- Nginx 服务未重启导致配置未生效
- 端口未监听或配置冲突
- 请求没有进入对应
server块
排查方法:
-
检查 Nginx 是否运行:
systemctl status nginx -
检查配置语法:
nginx -t -
查看 Nginx 错误日志:
tail -f /var/log/nginx/error.log
✅ 4. 防火墙/安全组限制
可能问题:
- 阿里云安全组未放行 443 端口
- 服务器防火墙阻止连接
排查方法:
- 检查阿里云控制台安全组规则,确认已放行入方向 443 端口
- 检查本地防火墙设置,尝试关闭后测试
- 使用
telnet或nc测试端口连通性:telnet zhongyuele.top 443
✅ 三、临时绕过 SSL 校验测试接口
如果你想绕开 SSL 错误,仅用于测试目的,可以使用 -k 参数忽略证书验证:
curl -k -v https://zhongyuele.top/api/banner/getIndexBanner
如果此时请求成功,则说明问题是 由 SSL/TLS 配置引发的握手失败。
📌 四、推荐解决方案总结
| 问题类型 | 检查点 | 方法 |
|---|---|---|
| SSL/TLS 握手失败 | Nginx SSL 配置 | 检查证书路径、协议版本、加密套件 |
| 证书无效 | 证书合规性 | 使用在线工具验证证书有效性 |
| Nginx 服务状态 | Nginx 是否运行 | systemctl status nginx |
| 防火墙限制 | 端口是否开放 | 检查安全组、系统防火墙 |
| 调试测试 | 忽略 SSL 验证 | 使用 curl -k 临时测试接口响应 |
🧪 五、附加测试建议
你可以通过以下方式进一步确认问题是否出在 SSL 握手上:
-
测试 HTTP 请求是否正常(绕过 HTTPS)
curl -v http://zhongyuele.top:80/api/banner/getIndexBanner -
使用 OpenSSL 测试 SSL 握手
openssl s_client -connect zhongyuele.top:443如果出现
CONNECTED(00000003)之后马上断开,说明 Nginx 没有正确返回证书或握手中间中断。
如果你方便贴一下你的 Nginx SSL 配置部分的内容,我可以帮你进一步判断具体哪里出错了。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)