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 配置部分的内容,我可以帮你进一步判断具体哪里出错了。