获取SSL证书:
证书文件:
example.com.crt
)intermediate.crt
)example.com.key
)确保已安装支持SSL的Nginx版本:
sudo apt update
sudo apt install nginx
将证书文件上传到服务器,建议存放在:
/etc/nginx/ssl/
编辑Nginx配置文件(通常在/etc/nginx/sites-available/your_site.conf
):
server {
listen 443 ssl;
server_name example.com www.example.com;
# SSL证书配置
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
# 启用SSL会话缓存以提高性能
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# 安全协议和加密套件配置
ssl_protocols TLSv1.2 TLSv1.3;
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;
# HSTS (可选但推荐)
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
# 其他配置...
root /var/www/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
添加一个80端口的server块来重定向所有HTTP请求到HTTPS:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
# 测试配置语法
sudo nginx -t
# 重启Nginx使配置生效
sudo systemctl restart nginx
提高SSL验证性能:
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/ssl/ca-bundle.crt; # 包含根证书和中间证书
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
生成更强的DH参数:
openssl dhparam -out /etc/nginx/dhparam.pem 2048
然后在配置中添加:
ssl_dhparam /etc/nginx/dhparam.pem;
listen 443 ssl http2;
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
sudo certbot renew --dry-run
使用以下工具验证SSL配置:
- SSL Labs测试
- 命令行工具:
bash
openssl s_client -connect example.com:443 -servername example.com -tlsextdebug -status
证书链不完整:
cat intermediate.crt >> example.com.crt
合并证书私钥不匹配:
bash
openssl x509 -noout -modulus -in example.com.crt | openssl md5
openssl rsa -noout -modulus -in example.com.key | openssl md5
协议/加密套件过时:
性能问题:
通过以上步骤,您应该能够成功配置Nginx的SSL/TLS加密通信,为网站提供安全的HTTPS连接。