正确配置SSL/TLS是保障网站安全的关键。仅仅部署SSL证书是不够的,还需要正确配置协议版本、加密套件、安全头等安全参数。本文将详细介绍SSL/TLS安全配置的最佳实践,帮助您构建安全可靠的HTTPS网站。
一、SSL/TLS协议版本配置
1. 推荐协议版本
当前推荐:
- TLS 1.2:广泛支持,安全性高
- TLS 1.3:最新版本,性能和安全性的最佳平衡
不推荐使用:
- SSL 2.0/3.0:已发现严重安全漏洞
- TLS 1.0/1.1:安全性较低,已被主流浏览器禁用
2. Nginx配置
# 只允许TLS 1.2和1.3
ssl_protocols TLSv1.2 TLSv1.3;
3. Apache配置
# 只允许TLS 1.2和1.3
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
二、加密套件配置
1. 推荐加密套件
TLS 1.3:
- TLS 1.3会自动选择最佳加密套件
- 无需手动配置
TLS 1.2推荐套件:
- 优先使用ECDHE(前向保密)
- 使用AES-GCM或ChaCha20-Poly1305
- 禁用弱加密算法(RC4、DES、3DES等)
2. Nginx配置
# TLS 1.3会自动选择,这里主要配置TLS 1.2
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305';
ssl_prefer_server_ciphers off; # TLS 1.3不需要
3. Apache配置
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305
SSLHonorCipherOrder on
三、前向保密(Perfect Forward Secrecy)
1. 什么是前向保密?
前向保密确保即使服务器的私钥被泄露,之前捕获的加密通信也无法被解密。这是通过每次会话使用不同的临时密钥来实现的。
2. 如何启用前向保密
使用ECDHE密钥交换:
- ECDHE(Elliptic Curve Diffie-Hellman Ephemeral)提供前向保密
- 确保加密套件中包含ECDHE
配置示例:
# 加密套件中优先使用ECDHE
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:...';
四、HSTS(HTTP Strict Transport Security)
1. 什么是HSTS?
HSTS是一个安全策略机制,强制浏览器只能通过HTTPS访问网站,防止降级攻击。
2. HSTS配置
Nginx配置:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
Apache配置:
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
参数说明:
max-age=31536000:有效期1年(秒)includeSubDomains:包含所有子域名preload:可以提交到HSTS预加载列表
3. HSTS预加载
提交到预加载列表:
- 访问 https://hstspreload.org/
- 输入域名
- 检查是否符合要求
- 提交申请
五、OCSP Stapling
1. 什么是OCSP Stapling?
OCSP Stapling允许服务器在TLS握手中包含证书状态信息,减少客户端查询OCSP服务器的次数,提高性能和隐私保护。
2. OCSP Stapling配置
Nginx配置:
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/ssl/chain.crt;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
Apache配置:
SSLUseStapling on
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"
六、安全响应头配置
1. 推荐安全头
X-Frame-Options:
- 防止点击劫持攻击
- 值:
SAMEORIGIN或DENY
X-Content-Type-Options:
- 防止MIME类型嗅探
- 值:
nosniff
X-XSS-Protection:
- 启用XSS过滤器
- 值:
1; mode=block
Content-Security-Policy:
- 内容安全策略
- 防止XSS攻击
2. Nginx配置
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Content-Security-Policy "default-src 'self'" always;
3. Apache配置
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Header always set X-XSS-Protection "1; mode=block"
Header always set Content-Security-Policy "default-src 'self'"
七、SSL会话配置
1. SSL会话缓存
Nginx配置:
# 在http块中配置(影响所有server块)
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
ssl_session_tickets off; # 禁用会话票证(TLS 1.3不需要)
Apache配置:
SSLSessionCache "shmcb:logs/ssl_session_cache(512000)"
SSLSessionCacheTimeout 300
2. 会话超时
- 设置合理的会话超时时间
- 平衡安全性和性能
- 推荐:1-24小时
八、证书配置
1. 证书链完整性
确保完整链:
- 使用包含中间CA的完整链文件
- 配置服务器发送证书链
- 定期检查证书链完整性
2. 证书密钥长度
推荐密钥长度:
- RSA:至少2048位(推荐4096位)
- ECDSA:至少256位(推荐384位)
3. 证书更新
- 定期更新证书
- 使用自动更新工具
- 监控证书到期时间
九、完整配置示例
1. Nginx完整配置
server {
listen 443 ssl http2;
server_name example.com www.example.com;
# SSL证书
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
ssl_trusted_certificate /etc/nginx/ssl/chain.crt;
# SSL协议
ssl_protocols TLSv1.2 TLSv1.3;
# SSL加密套件
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305';
ssl_prefer_server_ciphers off;
# SSL会话
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
ssl_session_tickets off;
# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# HSTS
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
# 安全头
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
# 其他配置...
}
2. Apache完整配置
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
# SSL配置
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/cert.pem
SSLCertificateKeyFile /etc/apache2/ssl/private.key
SSLCertificateChainFile /etc/apache2/ssl/chain.crt
# SSL协议
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
# SSL加密套件
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305
SSLHonorCipherOrder on
# OCSP Stapling
SSLUseStapling on
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"
# HSTS
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
# 安全头
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Header always set X-XSS-Protection "1; mode=block"
# 其他配置...
</VirtualHost>
十、安全测试
1. SSL Labs测试
访问 https://www.ssllabs.com/ssltest/ 输入域名,查看SSL配置评分。目标是获得A或A+评级。
2. 安全头测试
使用在线工具测试安全头配置:
- SecurityHeaders.com
- Mozilla Observatory
3. 定期检查
- 定期使用SSL测试工具检查
- 关注安全公告和更新
- 及时更新配置
十一、最佳实践总结
1. 协议和加密
- ✅ 使用TLS 1.2或更高版本
- ✅ 禁用不安全的协议和加密套件
- ✅ 启用前向保密
- ✅ 使用强加密算法
2. 安全特性
- ✅ 启用HSTS
- ✅ 启用OCSP Stapling
- ✅ 配置安全响应头
- ✅ 使用完整证书链
3. 性能优化
- ✅ 配置SSL会话缓存
- ✅ 使用HTTP/2
- ✅ 优化加密套件选择
- ✅ 启用OCSP Stapling减少延迟
4. 监控和维护
- ✅ 定期测试SSL配置
- ✅ 监控证书到期时间
- ✅ 关注安全公告
- ✅ 及时更新配置
总结
正确配置SSL/TLS安全参数是保障网站安全的关键。通过使用最新的协议版本、强加密套件、安全响应头和HSTS等安全特性,可以构建安全可靠的HTTPS网站。
关键要点:
- ✅ 使用TLS 1.2或更高版本
- ✅ 启用前向保密
- ✅ 配置HSTS
- ✅ 启用OCSP Stapling
- ✅ 配置安全响应头
- ✅ 定期测试和更新
记住,安全是一个持续的过程,需要定期检查和更新配置。如果您需要申请SSL证书,推荐使用OHTTPS平台,它提供了完整的证书管理和自动更新功能。
OHTTPS: 免费HTTPS证书/SSL证书申请 • 自动化更新、部署、监控
OHTTPS 支持通过多种域名验证方式(DNS验证、HTTP验证、文件验证等)申请免费的HTTPS证书/SSL证书,包括单域名证书、多域名证书、通配符证书、IP证书等,支持HTTPS证书/SSL证书的自动化更新、自动化部署、自动化监控及告警等,并支持将HTTPS证书/SSL证书自动化部署至阿里云、腾讯云、群晖NAS、百度云、七牛云、多吉云、又拍云、宝塔面板、Docker容器、SSH等,实现HTTPS证书/SSL证书的一站式申请、更新、部署、监控和管理。