nginx开启443浏览器访问提示:ERR_SSL_PROTOCOL_ERROR

错误常见于 Nginx 配置 SSL 证书有问题,浏览器直接拒绝建立 TLS 连接,导致 ERR_SSL_PROTOCOL_ERROR


1. 证书/私钥是否匹配(密钥是否匹配)

  • 检查 ssl_certificatessl_certificate_key 是否对应一对。
1
2
openssl x509 -noout -modulus -in your_cert.pem | openssl md5
openssl rsa -noout -modulus -in your_key.pem | openssl md5

两个哈希值必须一致,否则不匹配。


2. Nginx 配置是否正确

典型配置示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server {
listen 443 ssl; # 注意必须要显性填写ssl
server_name example.com;

ssl_certificate /etc/nginx/ssl/fullchain.pem; # 公钥证书(通常是 fullchain)
ssl_certificate_key /etc/nginx/ssl/privkey.pem; # 私钥

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;

location / {
root /var/www/html;
index index.html;
}
}

注意:

  • ssl_certificate 建议用 fullchain.pem(包含证书链),否则浏览器可能报协议错误。
  • listen 443 ssl; 必须加 ssl

3. 检查端口是否被占用

1
ss -ltnp | grep 443

确认是 Nginx 在监听 443,而不是其他服务(比如 Apache)。


4. 验证证书文件权限

1
ls -l /etc/nginx/ssl/
  • ssl_certificate_key 只能被 root 读取(0600 或 0640),否则启动可能失败。

5. 查看 Nginx 错误日志

1
tail -f /var/log/nginx/error.log

如果配置有误(比如 key 不对、证书格式错误),这里能看到提示。


6. 用 openssl 手动测试

1
openssl s_client -connect example.com:443

可以直接看到握手过程,是否报 handshake failureno shared cipher 等。