Debian + Nginx 出现 SSL 报错原因很多,必须看具体报错信息才能精确定位。我先从最常见原因 → 排查步骤 → 示例报错与解决方案给你一个系统性的排查指南。
sudo nginx -t
如果这里有错,后面的都不用看。
典型报错:
SSL_CTX_use_PrivateKey_file("/etc/nginx/ssl/xxx.key") failed
或
cannot load certificate
检查点:
ls -l /etc/nginx/ssl/
✅ 正确关系:
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
⚠️ 常见错误:
fullchain.pem 写成了 cert.pemroot 或 www-data)修复权限:
sudo chmod 600 /etc/nginx/ssl/*.key
sudo chown root:root /etc/nginx/ssl/*.key
典型报错:
SSL_CTX_use_PrivateKey_file: key values mismatch
验证是否匹配:
openssl x509 -noout -modulus -in fullchain.pem | md5sum
openssl rsa -noout -modulus -in privkey.pem | md5sum
✅ 两个 MD5 必须一样。
检查:
nginx -V 2>&1 | grep ssl
如果没有 --with-http_ssl_module,需要重新编译(一般不发生)。
典型报错:
no shared cipher
推荐安全配置:
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
certbot 正确路径:
ssl_certificate /etc/letsencrypt/live/域名/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/域名/privkey.pem;
⚠️ 不要直接指向 archive/
server {
listen 443 ssl;
server_name example.com;
}
如果只有:
listen 80;
HTTPS 一定失败。
sudo ss -lntp | grep 443
防火墙:
sudo ufw allow 443
sudo tail -n 50 /var/log/nginx/error.log
把具体报错贴出来,我可以直接给你精确解决方案。
✅ 建议直接贴:
nginx -t 输出/var/log/nginx/error.log 报错server {} 配置| 报错 | 原因 |
|---|---|
| PEM_read_bio_X509 | 证书格式错误 |
| key values mismatch | 公私钥不匹配 |
| cannot load certificate | 路径/权限 |
| no “ssl_certificate” | 忘了配 SSL |
| failed (SSL: error:0A000086) | TLS 协议不兼容 |
如果你愿意,把完整报错贴出来,我可以一步一步帮你修到能跑 ✅