FEATURED · 精选文章

HTTPS、TLS/SSL、数字签名 详细原理

发布时间 / 2026/9/15 7:28:40
来源 / 创域科博编辑部
栏目 / 资讯中心
HTTPS、TLS/SSL、数字签名 详细原理 一、基础概念区分SSL 和 TLSSSLSecure Socket Layer是早期的安全协议由网景公司开发。SSL 1.0、2.0、3.0 都存在严重安全漏洞已经全部废弃。 TLSTransport Layer Security传输层安全是 SSL 的继任版本本质是SSL 的标准化改名。现在我们使用的全部都是 TLS日常口语说的 SSL 证书只是习惯叫法证书里用的是 TLS。 版本TLS1.0、1.1 淘汰目前广泛部署 TLS1.2、TLS1.3。HTTPSHTTP 本身只是明文文本协议直接在网络传输任何中间节点路由器、网关都可以看到完整内容也可以随意修改报文。HTTPS HTTP TLSTCP 连接建立之后在收发 HTTP 数据之前先执行 TLS 握手协商一套安全参数。握手完成后所有 HTTP 请求响应都会交给 TLS 层做加密、完整性校验再交给 TCP 传输。 端口TCP 443。TLS 所处位置 应用层 (HTTP) ↔TLS 安全层↔ 传输层 (TCP) ↔ 网络层 IPHTTP/3 例外HTTP/3 不再跑 TCP跑 QUICTLS 直接内置在 QUIC 协议内部不再是独立分层。TLS 要一次性解决 3 个问题保密性传输的数据不能被中间人窃听看懂完整性传输的数据在半路不能被篡改身份认证客户端确认自己连接的服务器不是伪造的中间人二、两类加密算法TLS 的基础1. 对称加密特点加密、解密使用同一个密钥。 代表算法AES最常用、DES老旧淘汰。优点计算速度很快适合大批量数据加密网页、聊天消息缺点密钥分发难题。双方怎么安全交换这个共同密钥如果直接在网络传密钥中间人抓到就可以解密全部通信。TLS 握手结束后所有 HTTP 业务流量全部使用对称加密传输。2. 非对称加密公钥密码一对密钥公钥、私钥数学绑定成对生成。公钥可以公开分发任何人都能拿到私钥必须严格保密不能泄露两种用法一定要分开用法 1加密公钥加密私钥解密A 想发秘密消息给 BA 拿B 的公钥加密消息发送出去。 只有 B 手里的私钥才能解开。中间人拿到密文没有私钥无法解密。 作用保密传递秘密信息缺点运算量巨大速度极慢只能加密很短的数据不能用来加密网页这种大数据。用法 2数字签名私钥签名公钥验签数字签名不是加密原文 流程原始数据经过哈希函数SHA256生成固定长度哈希摘要。摘要相当于数据的指纹原文只要改 1 个 bit摘要完全改变。发送方用自己私钥加密这个哈希摘要加密后的结果就是数字签名。发送内容 【原始数据 数字签名】接收方 ① 收到原始数据自己计算一遍哈希摘要 ② 使用发送方的公钥解密签名得到发送方算出的原始摘要 ③ 对比两个摘要相同 数据没被篡改并且确定是持有对应私钥的人发出不相等 数据被改或者签名伪造。 数字签名目标证明身份 校验数据完整性不做保密任何人都能用公钥验签只能验证不能用来加密原文这和公钥加密是两套独立场景。三、数字证书 CA证书机构问题公钥从网络拿过来怎么确认这个公钥真的属于目标网站假设中间人劫持你的网络服务器发给你的公钥被替换成中间人自己的公钥。你以为拿到百度公钥实际拿到中间人公钥所有加密内容中间人都能解密。CA 就是解决公钥身份信任问题。数字证书本质是一个文件里面包含证书对应的域名如www.baidu.com网站的公钥证书有效期CA 机构信息CA 用自己私钥对上面所有信息生成的数字签名证书验证过程操作系统、浏览器出厂就预装了各大根 CA 的根公钥。 客户端拿到网站证书后验证根证书用根证书里面自带的根 CA 公钥验证这张根证书自身的签名自签名。验证通过代表我们信任这个公钥。提取证书里的信息 CA 的签名使用内置 CA 根公钥验证 CA 的数字签名验签成功 → 确认这份证书内容没有被篡改证书里的公钥确实属于这个域名额外校验证书是否过期域名和访问地址匹配证书有没有被吊销。关键点CA 的私钥极其重要一旦泄露就可以伪造任意网站证书。网站只保存自己的私钥证书里放的永远是网站公钥。证书链结构根CA本地预装 → 中间CA证书服务器下发 → 网站叶子证书服务器下发证书链很多证书不是根 CA 直接签发是中间 CA 签发。客户端需要逐级验签直到根 CA。TLS证书链验证完整过程前置条件客户端本地操作系统 / 浏览器预置可信根 CA 证书含根 CA 公钥信任锚点TLS 握手时服务端推送中间 CA 证书 叶子站点证书不推送根证书证书层级根 CA → 中间 CA → 叶子站点证书核心规则每一级证书由上一级 CA 私钥签名每一级证书由上一级 CA 公钥验签验签本质本地哈希 (tbsCertificate) 签名解密后的原始哈希摘要完整标准验证步骤1. 验证中间 CA 证书提取中间证书tbsCertificate证书待签名主体数据客户端根据证书指定哈希算法本地计算 tbs 哈希摘要 D1使用本地预置根 CA 公钥解密 / 校验中间证书的签名值得到签发时根 CA 生成的原始摘要 D2比对 D1 D2校验签名完整性与合法性附加合规校验证书时间有效性未过期、已生效BasicConstraints 为 CA 证书具备签发下级证书权限证书未被吊销CRL/OCSP结果确认中间 CA 公钥合法可信2. 验证叶子站点证书提取叶子证书tbsCertificate客户端本地计算 tbs 哈希摘要 S1使用已验证合法的中间 CA 公钥校验叶子证书签名得到中间 CA 签发时的原始摘要 S2比对 S1 S2确认叶子证书未篡改、为合法 CA 签发强制附加业务校验签名通过也必须校验证书有效期合法SAN/CN 域名与访问域名完全匹配ExtendedKeyUsage 包含 ServerAuth允许网站认证证书状态未吊销结果确认站点公钥真实可信归属当前访问域名最终结论证书链逐级验签完成信任传递成立客户端正式信任叶子证书内的服务器公钥进入 TLS 密钥交换阶段。四、TLS 握手TLS1.2 完整流程前提TCP 三次握手完成TCP 连接已经建立接下来开始 TLS 握手。ClientHello客户端 → 服务器客户端发送支持的 TLS 版本客户端支持的加密套件列表AES、哈希算法组合Client Random客户端生成一段随机数SNI指定要访问的域名一台服务器托管多个网站用来选择对应证书ServerHello服务器 → 客户端服务器返回选定的 TLS 版本选中的加密套件Server Random服务器生成一段随机数服务器证书链网站证书 中间证书客户端校验证书浏览器用内置 CA 公钥验证证书签名检查有效期、域名、吊销状态。校验失败直接终止连接、弹出不安全警告。密钥交换阶段两种模式RSA / ECDHERSA 模式老现在很少用无向前保密 客户端生成 Pre-Master Secret预主密钥用服务器公钥加密发给服务器。服务器用自己私钥解密拿到 Pre-Master Secret。ECDHE主流支持前向保密 双方交换临时椭圆曲线公钥。客户端拿自己私钥 服务器临时公钥算出 Pre-Master Secret服务器拿自己私钥 客户端临时公钥算出 Pre-Master Secret。两边算出完全一样的预主密钥。 ECDHE 的优势就算网站私钥以后泄露之前所有历史抓包流量依然无法解密这个特性叫前向保密。RSA 不具备。生成会话密钥 客户端、服务器三方材料Client Random Server Random Pre-Master Secret双方各自用相同算法算出一套对称会话密钥包含加密密钥、校验用密钥。两端互相发送 ChangeCipherSpec切换密码规范 通知对方后面报文全部启用对称加密传输。两端互相发送 Finished 消息 Finished 消息内容是本次握手全过程所有报文的哈希使用刚生成的会话密钥加密。 作用校验整个握手流程没有被中间人篡改。如果中间人修改握手报文两边哈希对不上直接断开连接。✅ TLS 握手结束。之后所有 HTTP 请求、响应全部使用这套对称会话密钥加密传输。TLS1.3 改动简化握手流程去掉很多不安全加密套件默认 ECDHE。普通场景1-RTT一次往返完成握手比 TLS1.2 更快0-RTT客户端可以在握手阶段直接带上 HTTP 请求减少一次往返代价是有一定重放攻击风险不是所有网站开启。五、TLS 报文传输特点 完整性保护TLS 不只是加密每一段 TLS 记录附带消息认证码 MAC或者 AEAD 认证加密现代套件用这个。 就算中间人把密文随便改一个字节接收方校验 MAC 会失败直接丢弃报文保证数据完整性。区分数字签名证书层面一次性验证服务器身份握手阶段使用MAC/AEAD业务传输阶段每一个数据包做完整性校验5.1 验证mac过程例子共享密钥abc123消息hello发送方HMAC (keyabc123, msghello) → 输出XYZ789发送包hello XYZ789中间人抓到包把消息改成helloworld中间人没有 abc123 密钥无法算出正确的 MAC。 接收方拿到 helloworld用 abc123 算 MAC结果≠XYZ789 → 判断报文被篡改丢弃。注意中间人可以修改消息 随便伪造一个 MAC但是没有密钥伪造出来的 MAC 一定无法匹配接收方计算结果。六、中间人攻击原理以及 TLS 如何防御中间人处在客户端和服务器链路中间可以转发、查看、修改数据包。无 TLS纯 HTTP中间人直接读取、修改全部明文毫无阻碍。如果只有非对称加密没有 CA 证书中间人可以替换服务器公钥客户端无法识别中间人解密再重新加密转发流量。HTTPSCA 证书中间人无法伪造合法证书没有 CA 私钥。客户端验签失败直接拒绝连接中间人攻击失效。七、常见概念澄清对称加密用来传业务数据非对称 / 数字签名只用在握手阶段传递密钥、证明身份不会加密网页内容。数字签名 ≠ 加密。签名用来验身份和完整性加密用来保密。证书里存网站公钥网站服务器本地保存网站私钥。CA 证书签名是 CA 用 CA 私钥签的。TLS 跑在 TCP 之上所以 TCP 的问题队头阻塞TLS 解决不了这也是 QUICHTTP3 出现的原因。、
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻