在 Debian 上使用 Nginx 配置 SSL 报错,原因可能有很多种。下面我按最常见的原因给你梳理一下,并给出对应的排查和解决办法。
SSL_CTX_use_PrivateKey_file("...") failed
cannot load certificate
www-data 运行)# 检查文件是否存在
ls -l /etc/nginx/ssl/
# 权限建议
chmod 600 /etc/nginx/ssl/*.key
chown root:root /etc/nginx/ssl/*
Nginx 配置示例:
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
openssl x509 -noout -modulus -in fullchain.pem | openssl md5
openssl rsa -noout -modulus -in privkey.pem | openssl md5
两个 md5 必须一致
Debian 官方 Nginx 默认带 SSL,但如果你自己编译过:
nginx -V | grep ssl
如果没有 --with-http_ssl_module,需要重新编译或安装:
apt install nginx-full
unknown directive "ssl"
nginx: [emerg] invalid number of arguments in "ssl_certificate"
nginx -t
常见错误:
listen 443; 没加 ssl;正确写法:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
}
Debian 默认用 AppArmor,可能限制 Nginx 读证书。
aa-status
把证书放到允许目录(如 /etc/nginx/),不要放 /home、/root
PEM_read_bio_X509_AUX failed
openssl x509 -in cert.crt -out cert.pem -outform PEM
如果你用 certbot:
certbot --nginx
常见错误:
nginx -t
journalctl -u nginx -xe
ls -l /etc/nginx/ssl
openssl x509 -in fullchain.pem -text -noout
如果你愿意,可以把具体的报错信息或 Nginx 配置片段发出来,我可以直接帮你定位是哪一条原因。