首先确认Nginx是否已编译安装SSL模块(--with-http_ssl_module),这是配置SSL的基础。通过以下命令查看Nginx编译参数:
sudo nginx -V 2>&1 | grep -o with-http_ssl_module 若未输出with-http_ssl_module,需重新编译Nginx并添加该模块(需下载Nginx源码并执行./configure --with-http_ssl_module && make && sudo make install)。
/etc/nginx/sites-available/default或/etc/nginx/conf.d/ssl.conf)中的ssl_certificate(证书文件,如.crt)和ssl_certificate_key(私钥文件,如.key)指令,确保路径与实际文件位置一致。www-data)读写,执行以下命令:sudo chmod 600 /etc/nginx/ssl/your_domain.crt /etc/nginx/ssl/your_domain.key sudo chown www-data:www-data /etc/nginx/ssl/your_domain.key # 私钥文件需归属www-data 若私钥权限过宽(如644),会导致Nginx拒绝加载。openssl x509 -in /etc/nginx/ssl/your_domain.crt -noout -dates 若证书已过期,需联系证书提供商续签。openssl x509 -noout -modulus -in /etc/nginx/ssl/your_domain.crt | openssl md5 openssl rsa -noout -modulus -in /etc/nginx/ssl/your_domain.key | openssl md5 若两行输出的MD5值不同,说明证书与私钥不匹配,需重新生成或获取正确的私钥。Nginx错误日志(默认路径/var/log/nginx/error.log)会记录SSL配置的具体错误。使用以下命令实时查看SSL相关错误:
sudo tail -f /var/log/nginx/error.log | grep -i "ssl" 常见日志错误及解决方法:
SSL_CTX_use_PrivateKey_file失败:私钥文件权限错误或内容损坏;certificate verify failed:证书链不完整(需添加中间证书);unsupported protocol:客户端与服务器TLS版本不匹配。在Nginx配置文件的server块中,明确指定支持的TLS版本(推荐TLSv1.2及以上)和安全的加密套件,避免使用过时或不安全的协议(如SSLv2、SSLv3):
ssl_protocols TLSv1.2 TLSv1.3; # 禁用TLSv1.0/1.1 ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384'; ssl_prefer_server_ciphers on; # 优先使用服务器端加密套件 修改后需测试配置语法并重载Nginx。
每次修改配置文件后,务必执行以下命令:
# 测试配置语法(无错误则继续) sudo nginx -t # 重载Nginx(应用新配置) sudo systemctl reload nginx # 或 sudo nginx -s reload 若nginx -t报错,需根据提示修正配置文件中的语法问题(如括号不匹配、指令拼写错误)。
通过SSL Labs的SSL Server Test输入域名,检查证书链完整性、协议支持、加密套件安全性等指标。工具会给出详细的整改建议(如添加缺失的中间证书、禁用不安全的协议)。
若服务器启用了防火墙(如ufw、iptables),需确保允许HTTPS流量(443端口)通过:
# 使用ufw(Ubuntu默认防火墙) sudo ufw allow 443/tcp sudo ufw reload # 使用iptables sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT sudo service iptables restart 若443端口未开放,客户端无法建立HTTPS连接。