HTTPS = HTTP + SSL/TLS,通过加密通信确保数据传输安全。主要优势包括: - 数据加密传输 - 身份验证 - 数据完整性保护
通常包括: - 证书文件(.crt或.pem) - 私钥文件(.key) - 可能的CA证书链文件
server {
listen 443 ssl;
server_name example.com;
# 证书路径配置
ssl_certificate /path/to/your_domain.crt;
ssl_certificate_key /path/to/your_domain.key;
# SSL协议配置
ssl_protocols TLSv1.2 TLSv1.3;
# 加密套件配置
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384...';
ssl_prefer_server_ciphers on;
# 其他配置
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
# 网站根目录配置
root /var/www/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
# HTTP重定向到HTTPS
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
# HTTPS服务器配置
server {
listen 443 ssl http2; # 启用HTTP/2
server_name example.com;
# 证书配置
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
# 启用OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/ssl/ca.crt;
# DH参数增强安全性
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
# HSTS头
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
# 其他安全头
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
# 网站内容配置
root /var/www/example.com;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/nginx/ssl/nginx.key \
-out /etc/nginx/ssl/nginx.crt
# 安装certbot
sudo apt install certbot python3-certbot-nginx
# 获取证书
sudo certbot --nginx -d example.com -d www.example.com
# 设置自动续期
sudo certbot renew --dry-run
症状:浏览器显示"证书不受信任" 解决:确保ssl_certificate包含完整的证书链
症状:SSL测试得分低
解决:
- 禁用旧协议:ssl_protocols TLSv1.2 TLSv1.3;
- 使用安全加密套件
症状:HTTPS页面加载HTTP资源 解决:确保所有资源使用HTTPS加载
优化方案: - 启用HTTP/2 - 启用OCSP Stapling - 调整SSL会话缓存
sudo nginx -t
openssl s_client -connect example.com:443 -servername example.com
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/example.com.crt;
ssl_certificate_key /path/to/example.com.key;
# ...
}
server {
listen 443 ssl;
server_name another.com;
ssl_certificate /path/to/another.com.crt;
ssl_certificate_key /path/to/another.com.key;
# ...
}
ssl_client_certificate /path/to/ca.crt;
ssl_verify_client on;
ssl_buffer_size 4k;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
通过以上配置和最佳实践,您可以构建一个安全、高效的HTTPS服务器。根据实际需求调整配置参数,并定期进行安全测试和优化。