1. SSL模块未启用
默认安装的Nginx可能未包含ngx_http_ssl_module模块,导致无法启用SSL配置。可通过nginx -V命令检查编译参数,若未包含--with-http_ssl_module,需重新编译Nginx并添加该模块。
2. 证书与私钥路径/内容错误
ssl_certificate(证书文件)或ssl_certificate_key(私钥文件)的路径配置错误,Nginx无法找到文件。需确认路径是否存在(如/etc/ssl/certs/或/etc/nginx/ssl/),并修正配置。openssl x509 -noout -modulus -in cert.crt | openssl md5和openssl rsa -noout -modulus -in key.key | openssl md5命令验证两者的MD5值是否一致。3. 证书链不完整
若证书缺少中间证书(如CA Bundle),浏览器会提示“证书不受信任”。需将中间证书合并到主证书文件中(如cat intermediate.crt your_domain.crt > fullchain.pem),并通过ssl_trusted_certificate指令指定路径。
4. 协议与加密套件配置不当
ssl_protocols TLSv1.2 TLSv1.3;。aNULL、MD5等弱加密算法,易被破解。推荐使用强加密套件:ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';,并启用ssl_prefer_server_ciphers on;。5. 文件权限问题
Nginx进程(通常为www-data用户)需有权限读取证书和私钥文件。需设置正确的用户组和权限:
sudo chown www-data:www-data /etc/ssl/certs/*.crt /etc/ssl/private/*.key
sudo chmod 600 /etc/ssl/private/*.key # 私钥文件需严格限制为600
6. 端口被占用或防火墙拦截
sudo netstat -tuln | grep 443检查,终止占用进程或修改Nginx监听端口。sudo ufw allow 443/tcp,并启用UFW:sudo ufw enable。7. Nginx配置语法错误
配置文件中的语法错误(如缺少分号、括号不匹配)会导致SSL无法启用。需通过sudo nginx -t命令测试配置,根据提示修正错误后,重启Nginx:sudo systemctl restart nginx。
8. 系统时间不正确
SSL证书的有效性依赖于系统时间,若系统时间偏差过大(如超过24小时),会导致证书验证失败。需同步系统时间:
sudo timedatectl set-ntp true # 启用NTP同步
sudo date -s "2025-09-28 12:00:00" # 手动设置时间(可选)
9. SELinux/AppArmor限制
若系统启用SELinux(如CentOS)或AppArmor(如Ubuntu),可能限制Nginx访问证书文件。需调整策略:
sudo semanage fcontext -a -t httpd_sys_content_t "/etc/nginx/ssl(/.*)?"; sudo restorecon -Rv /etc/nginx/ssl。/etc/apparmor.d/usr.sbin.nginx,添加证书目录的读取权限,然后重启AppArmor:sudo systemctl restart apparmor。