在 Debian 下 Nginx 配置 SSL 报错 是很常见的问题,原因通常集中在证书路径、权限、配置语法、版本兼容性这几类。下面我按「最常见原因 → 排查方法」给你一个实用清单。
报错示例:
SSL_CTX_use_certificate_chain_file("...") failed
✅ 检查:
ls -l /etc/nginx/ssl/xxx.crt
ls -l /etc/nginx/ssl/xxx.key
Nginx 配置中必须写 绝对路径:
ssl_certificate /etc/nginx/ssl/xxx.crt;
ssl_certificate_key /etc/nginx/ssl/xxx.key;
报错示例:
SSL_CTX_use_PrivateKey_file("...") failed
✅ 正确权限:
chmod 600 /etc/nginx/ssl/xxx.key
chown root:root /etc/nginx/ssl/xxx.key
验证是否匹配:
openssl x509 -noout -modulus -in xxx.crt | openssl md5
openssl rsa -noout -modulus -in xxx.key | openssl md5
两个 md5 必须一致。
报错示例:
unable to verify the first certificate
✅ 解决:
fullchain.crt(或 ca_bundle + 站点证书)合并ssl_certificate /etc/nginx/ssl/fullchain.crt;
例如:
ssl_protocols TLSv1.3;
但 Nginx / OpenSSL 版本过低。
✅ 查看版本:
nginx -V
openssl version
Debian 10 及更早版本 默认不支持 TLS 1.3。
❌ 错误:
server {
ssl on; # 老写法,已废弃
}
✅ 正确(推荐):
listen 443 ssl;
如果是 Docker:
docker exec -it nginx ls /etc/nginx/ssl
# 1. 测试配置
nginx -t
# 2. 看详细错误
journalctl -u nginx -n 50
# 3. 确认端口
ss -lntp | grep 443
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/fullchain.crt;
ssl_certificate_key /etc/nginx/ssl/private.key;
ssl_protocols TLSv1.2 TLSv1.3;
}
你可以直接把 完整报错信息 + nginx.conf 相关部分 贴出来,我可以帮你精准定位是哪一行配置的问题。