证书(.crt/.pem)与私钥(.key)必须为同一密钥对,否则Nginx启动时会报错(如SSL_CTX_use_PrivateKey_file失败)。
解决方法:使用OpenSSL命令验证两者匹配性:
openssl rsa -noout -modulus -in private.key | openssl md5
openssl x509 -noout -modulus -in certificate.crt | openssl md5
若输出不一致,需重新生成密钥对或获取匹配的证书。
配置文件中ssl_certificate(证书路径)、ssl_certificate_key(私钥路径)需指向正确文件,且Nginx进程(如www-data)有读取权限。
解决方法:
ls -l检查文件是否存在;chmod 600 /path/to/private.key(私钥严格限制为600),chown www-data:www-data /path/to/certificate.crt(所属用户为Nginx用户)。Nginx需编译--with-http_ssl_module模块才能支持SSL,旧版本可能未启用。
解决方法:
nginx -V(输出中需包含--with-http_ssl_module);配置文件中SSL指令(如ssl on(已弃用)、ssl_certificate)格式错误(如缺少分号、括号不匹配)。
解决方法:
nginx -t命令测试语法,根据报错信息修正;ssl on已弃用,需在listen指令中添加ssl参数(如listen 443 ssl;)。使用旧版本协议(如SSLv3、TLSv1.0)或弱加密套件(如RC4、DES)会导致安全漏洞(如POODLE、BEAST攻击)。
解决方法:
ssl_protocols TLSv1.2 TLSv1.3;;ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';;ssl_prefer_server_ciphers on;。中间证书缺失会导致浏览器显示“证书不受信任”错误。
解决方法:
.ca-bundle文件);cat certificate.crt intermediate.crt > ca_bundle.crt;ssl_trusted_certificate /path/to/ca_bundle.crt;。443端口被其他程序(如Apache)占用,或防火墙(如ufw、iptables)未开放443端口,导致HTTPS无法访问。
解决方法:
sudo netstat -tuln | grep 443,若被占用,杀掉进程或修改Nginx端口;sudo ufw allow 443/tcp(Ubuntu)或sudo firewall-cmd --add-service=https --permanent(CentOS)。当出现SSL错误时,Nginx错误日志(通常位于/var/log/nginx/error.log)会记录具体原因(如证书加载失败、权限问题)。
解决方法:
sudo tail -f /var/log/nginx/error.log;Permission denied、No such file or directory)针对性解决。