什么是SSL/TLS?
SSL(安全套接字层)和TLS(传输层安全)是保护网络通信的密码协议。TLS是SSL的现代后继者,但"SSL"仍然常用于指两者。这些协议启用HTTPS,加密浏览器和服务器之间的数据。
SSL与TLS:简史
| 版本 | 年份 | 状态 |
|---|---|---|
| SSL 1.0 | 1994 | 从不发布(有缺陷) |
| SSL 2.0 | 1995 | 已弃用(不安全) |
| SSL 3.0 | 1996 | 已弃用(POODLE漏洞) |
| TLS 1.0 | 1999 | 已弃用 |
| TLS 1.1 | 2006 | 已弃用 |
| TLS 1.2 | 2008 | 当前标准 |
| TLS 1.3 | 2018 | 最新,推荐 |
现代系统应该只使用TLS 1.2或TLS 1.3。
TLS的工作原理
TLS握手
1. 客户端Hello:浏览器发送支持的TLS版本和密码套件
2. 服务器Hello:服务器选择TLS版本和密码套件
3. 证书:服务器发送其SSL证书
4. 密钥交换:安全密钥交换(因密码套件而异)
5. 已完成:加密会话建立
客户端 服务器
|-- 客户端Hello ------------->|
|<-- 服务器Hello ---------------|
|<-- 证书 -----------------------|
|<-- 密钥交换 -------------------|
|-- 密钥交换 ----------------->|
|-- 已完成 -------------------->|
|<-- 已完成 ---------------------|
|<======= 加密会话 =============>|
TLS 1.3将其减少到单个往返,改进性能。
SSL/TLS证书
证书中的内容?
- 主题:证书覆盖的域名
- 发行者:发行证书的证书颁发机构(CA)
- 有效期:开始和过期日期
- 公钥:用于建立加密连接
- 签名:CA的密码签名
证书类型
域验证(DV):仅证明域所有权- 在几分钟内发行
- 免费(Let's Encrypt)或低成本
- 显示挂锁,无组织信息
- 需要业务验证
- 在证书详情中显示组织名称
- 更高信任,中等成本
- 严格的身份验证
- 之前显示绿色条(浏览器已删除此选项)
- 最高成本,最高信任
证书覆盖范围
单域:覆盖一个域(example.com) 通配符:覆盖所有子域(*.example.com) 多域(SAN):覆盖多个特定域实施SSL/TLS
使用Let's Encrypt的免费证书
# 使用Certbot
sudo certbot --nginx -d example.com -d www.example.com
# 自动续期
sudo certbot renew --dry-run
云提供商证书
大多数云平台提供免费、自动续期的证书:
- Cloudflare:代理域的自动
- AWS:证书管理器(ACM)
- Google Cloud:托管SSL证书
证书验证
浏览器通过以下方式验证证书:
1. 检查证书链到受信任的根CA
2. 验证证书未过期
3. 确认域匹配
4. 检查撤销状态(CRL/OCSP)
SSL/TLS最佳实践
服务器配置
使用TLS 1.2+:禁用SSL 3.0、TLS 1.0、TLS 1.1ssl_protocols TLSv1.2 TLSv1.3;
强密码套件:优先选择现代、安全的密码
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
HSTS:强制HTTPS(见HSTS词汇条目)
证书管理
- 自动续期:证书过期(Let's Encrypt为90天)
- 监控过期:在证书过期前设置警报
- 使用CAA记录:限制哪些CA可以发行证书
检查SSL/TLS
使用DomScan:curl "https://domscan.net/v1/health?domain=example.com"
# 返回SSL有效性、发行者、过期
使用OpenSSL:
openssl s_client -connect example.com:443 -servername example.com
在线工具:SSL实验室(ssllabs.com/ssltest)提供全面分析。
常见SSL问题
混合内容:HTTPS页面加载HTTP资源(被浏览器阻止) 证书不匹配:证书与域不匹配 过期证书:证书有效期已结束 不完整链:缺少中间证书SSL/TLS不再可选——所有网站都应使用HTTPS以保证安全和SEO优势。