https机制

HTTPS的整套认证体系,最终归结为**"我凭什么信任这把公钥是真的?"**

答案就是:因为它在我的操作系统出厂时就已经存在,而我相信我的操作系统厂商和那些CA机构经过了足够严格的审核。 可以理解为:我们把对物理世界的信任(对微软/Apple/Google等商业实体的信任)投射到了数字世界。只要这个初始条件成立,后面的密码学运算就牢不可破。这就是你所说的"基础"。

HTTPS最终方案:非对称加密 + 对称加密 + 证书认证

在客户端和服务器刚一建立连接的时候, 服务器给客户端返回一个 证书,证书包含了之前服务端的公钥, 也包含了网站的身份信息.

客户端进行认证

client第一次请求,得到返回结果,不仅仅得到了公钥,实际上client得到的是一个"证书",CA机构签发的证书。

客户端获取到这个证书之后, 会对证书进行校验(防止证书是伪造的).

  • 判定证书的有效期是否过期
  • 判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构).
  • 验证证书是否被篡改: 从操作系统中拿到该证书发布机构的公钥, 对签名解密, 得到一个hash 值(称为数据摘要), 设为 hash1. 然后计算整个证书的 hash 值, 设为 hash2. 对比 hash1 和 hash2 是否相等. 如果相等, 则说明证书是没有被篡改过的

注意:

在验证证书是否被篡改这一步,从操作系统中拿到的公钥,绝不是从返回的证书里面取出的网站公钥 ,而是CA(证书颁发机构)的公钥

我把这两把完全不同的公钥做一个对比,你就清楚了:

公钥来源 在哪个证书里 谁持有对应的私钥 在本步骤中的用途
CA的公钥 操作系统内置的根证书 CA机构自己 用来解密 网站证书上的数字签名,从而得到 hash1
网站的公钥 网站返回的站点证书 网站服务器持有 后续建立TLS加密会话 时用于协商密钥,不是用来验证签名的
常见问题:
中间人有没有可能篡改该证书?

由于中间人没有 CA 机构的私钥,所以无法 hash 之后用私钥加密形成签名,那么也就没法办法对篡改后的证书形成匹配的签名,这个世界上只有CA机构有私钥,也就意味着,只有CA机构才有对数据进行签名的能力!

中间人整个掉包证书?
  • 因为中间人没有 CA 私钥,所以无法制作假的证书
  • 所以中间人只能向 CA 申请真证书,然后用自己申请的证书进行掉包
  • 这个确实能做到证书的整体掉包,但是别忘记,证书明文中包含了域名等服务端认证信息,如果整体掉包,客户端依旧能够识别出来。
  • 永远记住:中间人没有 CA 私钥,所以对任何证书都无法进行合法修改,包括自己的
为什么签名不直接加密,而是要先 hash 形成摘要?

缩⼩签名密文的⻓度,加快数字签名的验证签名的运算速度

HTTPS通信的完整流程:

总结 HTTPS 工作过程中涉及到的密钥有三组:

  • 第一组(非对称加密): 用于校验证书是否被篡改. 服务器持有私钥(私钥在形成 CSR 文件与申请证书时获得), 客户端持有公钥(操作系统包含了可信任的 CA 认证机构有哪些, 同时持有对应的公钥). 服务器在客户端请求时,返回携带签名的证书. 客户端通过这个公钥进行证书验证, 保证证书的合法性,进一步保证证书中携带的服务端公钥权威性。
  • 第二组(非对称加密): 用于协商生成对称加密的密钥. 客户端用收到的 CA 证书中的公钥(是可被信任的)给随机生成的对称加密的密钥加密, 传输给服务器, 服务器通过私钥解密获取到对称加密密钥.
  • 第三组(对称加密): 客户端和服务器后续传输的数据都通过这个对称密钥加密解密.

其实一切的关键都是围绕这个对称加密的密钥. 其他的机制都是辅助这个密钥工作的!

相关推荐
你好潘先生16 小时前
别再记命令了,用 yeero do 说句人话就能跑脚本,而且不烧 token
服务器·python·命令行
程序员老赵1 天前
服务器文件不想 SFTP 上传?Docker 跑个 File Browser,浏览器就能管理
服务器·docker·开源
vivo互联网技术2 天前
从 10 分钟到 1 秒:ES 深度分页任意跳页的三轮优化实战
服务器·数据库·redis·elasticsearch·深度分页
牛奶2 天前
HTTPS你不知道的事
前端·https·浏览器
AlfredZhao6 天前
生产环境里,为什么不建议把普通端口直接暴露到公网?
linux·https·443·80
Avan_菜菜10 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
zzzzzz31013 天前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
大树8816 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
小宇宙Zz16 天前
Maven依赖冲突
java·服务器·maven