# ERR_SSL_PROTOCOL_ERROR：“此网站无法提供安全连接”怎么解决

> ERR_SSL_PROTOCOL_ERROR 表示 TLS 握手在校验证书之前就失败了。多数是服务器端口或 TLS 配置问题，少数是代理和杀软干扰。

Source: https://ssl.sh/zh/errors/err-ssl-protocol-error/
Last updated: 2026-11-10

**ERR_SSL_PROTOCOL_ERROR 的意思是：TLS 握手失败了，Chrome 收到的回应无法按 TLS 解析。** 证书还没来得及检查。只有一个网站报，通常是服务器配置错；很多网站都报，多半是你电脑上或网络里有东西在干扰 HTTPS。

## 先判断是网站的问题还是你电脑的问题

外部检测也握手失败，是服务器的问题；外部检测正常，问题在你的电脑或网络。用 [SSL 检测](https://ssl.sh/zh/tools/ssl-checker/) 从外部测一下：

```bash
curl ssl.sh/example.com
```

- **检测也握手失败**：服务器有问题，访客这边修不了，通知网站方。
- **检测正常**：问题在本地。依次试试：手机流量代替 Wi-Fi、无痕窗口（会禁用扩展）、暂停杀毒软件的 HTTPS 扫描。哪一步之后好了，原因就在哪。

## 原因

这个错误有 5 种原因，服务器端最常见的是 443 端口跑的是明文 HTTP。

### 1. 443 端口跑的是明文 HTTP

Nginx 写了 `listen 443;` 却没加 `ssl`，或者某个程序直接在 443 上跑 HTTP。Chrome 发出 ClientHello，收到的是一段 HTTP 响应。确认方法：

```bash
curl -sv http://example.com:443/ -o /dev/null 2>&1 | head -5
```

能拿到 HTTP 响应，就说明 443 没开 TLS。Firefox 遇到同样的问题会报 [SSL_ERROR_RX_RECORD_TOO_LONG](https://ssl.sh/zh/errors/ssl-error-rx-record-too-long/)。

### 2. TLS 配置不完整或有错

证书文件不存在、私钥和证书不匹配、TLS 终止程序握手时崩溃，都可能返回乱码或直接断开。看服务器错误日志，并用下面的命令测：

```bash
openssl s_client -connect example.com:443 -servername example.com -brief
```

### 3. 代理、防火墙或杀毒软件干扰

开启 HTTPS 扫描的安全软件、老旧的公司代理和部分家用路由器会改写或截断 TLS 流量。关闭 HTTPS 扫描或换网络后恢复，就看 [杀毒软件 HTTPS 扫描](https://ssl.sh/zh/errors/antivirus-https-scanning-ssl-error/) 和 [公司 SSL 解密](https://ssl.sh/zh/errors/corporate-ssl-inspection/)。

### 4. HSTS 把只支持 HTTP 的站强制升级成 HTTPS

域名曾经下发过 `Strict-Transport-Security` 头，Chrome 之后所有请求都会自动改成 HTTPS。如果某个测试环境或老系统只支持 HTTP，就会报这个错。正确做法是把 HTTPS 配好；如果是自己的开发域名，见 [HSTS 报错](https://ssl.sh/zh/errors/hsts-cannot-bypass/)。

### 5. 系统时间不对或浏览器太旧

很老的浏览器和新服务器协商不了，这种情况比较少见。升级浏览器、确认系统时间正确。

## 在各浏览器/系统上的样子

Chrome 内核的浏览器都显示 ERR_SSL_PROTOCOL_ERROR，Firefox、Safari 和 curl 对同一个故障各有说法。

| 浏览器 | 显示内容 |
|---|---|
| Chrome / Edge / 360 极速模式 / QQ 浏览器 | “此网站无法提供安全连接”“example.com 发送的响应无效。”`ERR_SSL_PROTOCOL_ERROR` |
| Firefox | “建立安全连接失败”，代码 [SSL_ERROR_RX_RECORD_TOO_LONG](https://ssl.sh/zh/errors/ssl-error-rx-record-too-long/) 或 [PR_END_OF_FILE_ERROR](https://ssl.sh/zh/errors/pr-end-of-file-error/) |
| Safari | [Safari 无法建立安全连接](https://ssl.sh/zh/errors/safari-cant-establish-secure-connection/) |
| curl | `wrong version number` 或 `unexpected eof while reading` |

## 站长怎么修

站长要让 443 端口返回 TLS 握手，改完从外部复测。

**1. 给 443 监听加上 ssl。** Nginx：

```nginx
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    http2 on;
    server_name example.com;
    ssl_certificate     /etc/nginx/ssl/example.com.fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;
}
```

`http2 on;` 需要 Nginx 1.25.1 及以上，老版本写成 `listen 443 ssl http2;`。宝塔面板里开启 SSL 后会自动生成这段，手工改过配置文件的要检查有没有被覆盖。

**2. 检查再重载。** 先 `nginx -t`，没有报错再 `systemctl reload nginx`。

**3. 协议只开 TLS 1.2 和 1.3。** [TLS 配置生成器](https://ssl.sh/zh/tools/tls-config-generator/) 能生成 Nginx、Apache 等的推荐配置。

**4. 从外部复测。** `curl ssl.sh/example.com` 应该能看到握手完成、协商出的协议版本和证书链。用了阿里云/腾讯云 CDN 的，回源协议和回源端口也要对上：回源选 HTTPS 却回源到源站的 80 端口，同样会握手失败。
