1. 证书文件准备与路径检查
确保获取完整的SSL证书文件,包括服务器证书(如your_domain.crt/fullchain.pem)、私钥(如your_domain.key)及中间证书(若有,需合并到服务器证书中)。上传至服务器安全目录(如/etc/nginx/ssl/),并通过ls命令确认文件存在。特别注意私钥文件的权限,需设置为仅Nginx进程可读(chmod 600 /etc/nginx/ssl/*.key),避免泄露。
2. 配置文件语法与参数准确性
修改Nginx配置文件(通常位于/etc/nginx/sites-available/your_domain.conf或/etc/nginx/conf.d/your_domain.conf)时,需确保关键参数正确:
listen 443 ssl;:必须同时指定端口和SSL协议;ssl_certificate:指向服务器证书文件(含中间证书);ssl_certificate_key:指向私钥文件。
配置完成后,务必使用nginx -t命令检查语法,若有错误需及时修正,避免Nginx无法启动。
3. 协议与加密套件安全性
禁用不安全的TLS版本(如TLSv1.0、TLSv1.1),仅启用TLSv1.2及以上版本(ssl_protocols TLSv1.2 TLSv1.3;);配置强加密套件,推荐使用ECDHE系列(如ECDHE-ECDSA-AES128-GCM-SHA256、ECDHE-RSA-AES256-GCM-SHA384),并禁用弱算法(如MD5、RC4),通过ssl_ciphers参数设置(如ssl_ciphers 'HIGH:!aNULL:!MD5:!RC4')。同时,启用ssl_prefer_server_ciphers on;让服务器优先选择加密套件。
4. 证书链完整性验证
若使用中间证书,需将服务器证书与中间证书合并为一个文件(如cat your_domain.crt intermediate.crt > fullchain.pem),并在配置中指定合并后的文件路径(ssl_certificate /etc/nginx/ssl/fullchain.pem)。可通过openssl verify -CAfile fullchain.pem your_domain.crt命令验证证书链是否完整,确保证书有效。
5. 私钥匹配性检查
使用OpenSSL命令验证私钥与证书是否配对:
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
若两次输出的哈希值一致,则私钥与证书匹配,否则需重新获取证书或私钥。
6. 防火墙与端口设置
确保服务器防火墙放行443端口(HTTPS默认端口),例如使用firewalld时执行:
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
或使用ufw时执行:sudo ufw allow 443/tcp。同时,检查安全组规则(如云服务器的安全组),确保入方向443端口未被拦截。
7. HTTP重定向至HTTPS(可选但推荐)
为强制所有HTTP请求跳转至HTTPS,需添加80端口的server块配置:
server {
listen 80;
server_name your_domain.com www.yourdomain.com;
return 301 https://$host$request_uri;
}
这可避免HTTP明文传输,提升网站安全性。
8. 自动续期(针对Let’s Encrypt证书)
若使用Let’s Encrypt免费证书,需设置自动续期以避免证书过期。安装Certbot后,执行certbot --nginx -d your_domain.com获取证书,系统会自动添加cron任务。可通过sudo certbot renew --dry-run命令测试自动续期是否正常,确保证书持续有效。