https/CA/签名/证书

306 阅读3分钟

https

https = http + ssl/tls

https是以安全为目标的 HTTP 通道,是 HTTP 的安全版。HTTPS 的安全基础是 SSL。SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。SSL 协议可分为两层:SSL 记录协议(SSL Record Protocol),它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL 握手协议(SSL Handshake Protocol),它建立在 SSL 记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

过程

主要使用了非对称(公钥)加密 + 对称加密,二者结合起来(混合加密)。

  • 用户在浏览器发起 HTTPS 请求(如 juejin.im/),默认使用服务端的443端口进行连接;

  • HTTPS 需要使用一套 CA数字证书,证书内会附带一个公钥 Pub,而与之对应的私钥 Private 保留在服务端不公开;

  • 服务端收到请求,返回配置好的包含公钥 Pub 的证书给客户端;

  • 客户端收到证书,校验合法性,主要包括是否在有效期内、证书的域名与请求的域名是否匹配,上一级证书是否有效(递归判断,直到判断到系统内置或浏览器配置好的根证书),如果不通过,则显示HTTPS警告信息,如果通过则继续;

  • 客户端生成一个用于对称加密的随机 Key(对称密钥) ,并用证书内的公钥 Pub 进行加密,发送给服务端;

  • 服务端收到随机 Key 的密文,使用与公钥 Pub 配对的私钥 Private 进行解密,得到客户端真正想发送的随机 Key

  • 服务端使用客户端发送过来的随机 Key 对要传输的 HTTP 数据进行对称加密,将密文返回客户端;

  • 客户端使用随机 Key 对称解密密文,得到 HTTP 数据明文;

  • 后续 HTTPS 请求使用之前交换好的随机 Key 进行对称加解密。

为什么需要CA、证书?

在服务端首次响应返回公钥时,有可能遭遇中间人攻击:

中间人截获服务端公钥并自己生成公私钥对发送给客户端,客户端收到后并不知道公钥已经被替换,仍使用该公钥对key进行加密并发送给服务端。此时中间人再次截获报文,可以通过自己的私钥进行解密拿到key,那么这样后续的加密对中间人来说相当于失效了。

因此,证书的出现就是为了防止中间人公钥替换攻击。

证书中包含公钥、持有者相关信息、有效时间等,服务端将证书也一起发送给客户端,客户端在校验证书内容和要访问的网站身份一致时,才进行后续的加密操作,这个步骤就是身份验证。

CA作为证书颁发机构,自身具有一对公私钥。此处用到了数字签名。CA对证书使用自身的私钥进行签名,客户端在拿到证书之后,可以通过CA的公钥进行验签,这样就防范了中间人攻击。

参考

juejin.cn/post/699220…

blog.csdn.net/qq_38289815…