在 Debian 上修复 Nginx SSL 错误,需要先明确具体错误表现。下面我按常见场景 + 排查步骤 + 修复方法给你一个实用指南。
查看 Nginx 错误日志:
sudo tail -n 50 /var/log/nginx/error.log
常见错误关键词:
SSL_CTXcannot load certificateSSL handshakingunknown protocolcertificate has expired错误示例
cannot load certificate "/etc/nginx/ssl/example.crt":
No such file or directory
✅ 修复:
ls -l /etc/nginx/ssl/
确认路径与 Nginx 配置一致:
ssl_certificate /etc/nginx/ssl/example.crt;
ssl_certificate_key /etc/nginx/ssl/example.key;
注意:
.crt和.key必须都存在- 权限建议:
600,属主root:root
错误示例
SSL_CTX_use_PrivateKey_file("...") failed
✅ 验证是否匹配:
openssl x509 -noout -modulus -in example.crt | openssl md5
openssl rsa -noout -modulus -in example.key | openssl md5
两个 MD5 必须一致。
错误示例
✅ 修复(合并证书):
cat example.crt intermediate.crt root.crt > fullchain.crt
Nginx 配置:
ssl_certificate /etc/nginx/ssl/fullchain.crt;
openssl x509 -in example.crt -noout -dates
✅ 解决:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com
错误示例
unknown directive "ssl"
✅ 检查:
nginx -V | grep ssl
Debian 默认包含 ssl module
如果没有:
sudo apt install --reinstall nginx
server {
listen 443 ssl;
server_name example.com;
}
检查:
sudo nginx -t
sudo systemctl restart nginx
防火墙:
sudo ufw allow 443/tcp
错误示例
SSL handshake failed
✅ 推荐配置:
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
sudo nginx -t
sudo systemctl status nginx
sudo ss -tulnp | grep 443
openssl s_client -connect example.com:443
你可以直接把 Nginx 报错原文 或 配置文件 发给我,我可以:
你是 自签证书 / 云厂商证书 / Let’s Encrypt 哪一种?