TLS 是什么
传输层安全协议给任意基于连接的应用程序加一层加密通道:先握手协商算法、交换密钥并验证证书身份,之后所有数据都在记录层加密传输。加密的网页访问、加密的邮件收发本质上都是它在工作。它的三大目标是机密性(内容不可被旁观者读懂)、完整性(内容被篡改能被发现)与身份认证(确认对面确实持有该域名对应私钥的一方)。
基本信息
| 定位 | 位于应用层与传输层之间,也有基于数据报的变体 |
|---|---|
| 三大目标 | 机密性、完整性、身份认证 |
| 组成 | 握手协议、记录层协议、告警协议 |
| 当前版本 | 加密访问部署应使用较新的两个版本 |
| 常见载体 | 加密网页访问、加密邮件、加密数据库连接 |
典型使用场景
- 网站与接口启用加密访问,避免口令与内容在链路上被窃听
- 内部服务之间加密通信,满足合规与横向移动防护要求
- 数据库与消息队列启用加密连接,保护传输中的业务数据
- 接入第三方服务时校验对端证书,确认对方身份
- 本地排查加密握手问题,确认协议版本与证书链是否正确
连上任意加密服务看细节
连上任意加密服务看细节
openssl s_client -connect example.com:443 -servername example.com # 交互里能看协议版本、套件与证书链
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | openssl x509 -noout -dates # 只看有效期
openssl s_client -connect example.com:443 -servername example.com -showcerts 2>/dev/null | head -40 # 看证书链是否完整握手阶段在做什么
| 阶段 | 内容 | 观察要点 |
|---|---|---|
| 协商 | 双方选定协议版本与加密套件 | 版本过低说明兼容配置未收敛 |
| 认证 | 服务端出示证书,客户端校验签发链与域名 | 链不完整时部分客户端直接拒绝连接 |
| 密钥交换 | 建立会话密钥,多数算法具备前向保密 | 服务端私钥泄漏也不会拖累历史会话 |
| 应用数据 | 后续通信全部加密,包括请求头部 | 中间设备看不到明文,抓包只能看到密文 |
证书排查清单
- 核对有效期:过期是加密访问突然失败最常见的原因,最好设置到期提醒
- 核对域名覆盖范围:证书里的名字必须包含实际访问的域名,否则浏览器会报名字不匹配
- 核对签发链完整性:服务端要把中间证书一起下发,只发服务器证书会让部分客户端握手失败
- 核对时间同步:本机时间偏差过大会导致证书被判定为尚未生效或已经过期
加密只保证通道安全,不保证对面一定可信:钓鱼站点同样能申请到合法证书。用户看到的锁标只说明连接被加密以及域名归属,不等于站点内容可靠。
早期的不安全版本已被废弃,现代部署应使用较新的两个版本,并在服务端同时关闭过时版本与弱算法,否则仍可能被降级攻击命中。
握手失败怎么分方向
- 协议版本不匹配、证书链不完整、证书名字不匹配这三类报错文本完全不同,先把报错归类再动手
- 启用新版本后要同时验证老旧客户端仍能连接,必要时保留一个兼容版本过渡
- 内部服务启用加密后,证书续期同样要自动化,否则会在某个凌晨集体中断