HTTPS

HTTPS

  • HTTPS(Hyper Text Transfer Protocol Secure): 超文本传输安全协议, 常称为 HTTP over TLS 、HTTP over SSL 、HTTP Secure, 由网景公司于 1994 年首次提出
  • 默认端口是 443

SSL/TLS

  • HTTPS 是在 HTTP 的基础上使用 SSL/TLS 来加密报文,对窃听和中间人攻击提供合理的防护
  • SSL/TLS 也可以用在其他协议上,比如: FTP -> FTPS、SMTP->SMTPS
  • TLS(Transport Layer Security): 传输层安全协议, 前身是 SSL(Secure Sockets Layer) 安全套接层
  • SSL/TLS 工作在应用层和传输层之间


OpenSSL

  • OpenSSL 是 SSL/TLS 协议的开源实现,始于 1998 年,支持 windows、Mac、Linux 等平台
  • 生成私钥: openssl genrsa -out my.key
  • 生成公钥: openssl rsa -in my.key -pubout -out my.pem
  • 可以使用 OpenSSL 构建一套属于自己的 CA,自己给自己颁发证书,称为"自签证书"

HTTPS 的成本

  • 证书的费用
  • 加解密计算
  • 降低了访问速度
  • 有些企业的做法是: 包含敏感数据的请求才使用 HTTPS,其他保持使用 HTTP

HTTPS 的通信过程

  • 总的可以分为 3 大阶段
    1、TCP 的 3 次握手
    2、TLS 的连接
    3、HTTP 请求和响应

TLS 1.2 的连接

  • 大概是 10 大步骤,不同的秘钥交换算法,步骤也有差异,下面的是以ECDHE算法讲解的
  • 图片中省略了中间产生的一些 ACK 确认


  • 1、Client Hello
  • TLS 的版本号
  • 支持的加密组件(Cipher)列表, 加密组件是指所使用的加密算法及秘钥长度等
  • 一个随机数(Client Random)
  • 2、Server Hello
  • TLS 的版本号
  • 选择的加密组件,是从接收到的客户端加密组件列表中挑选出来的
  • 一个随机数(Server Random)
  • 3、Certificate
  • 服务器的公钥证书(被 CA 签名过的)
  • 4、Server Key Exchange
  • 用以实现 ECDHE 算法的其中一个参数(Server Params), ECDHE是一种秘钥交换算法,为了防止伪造,Server Params 经过了服务器私钥签名
  • 5、Server Hello Done
  • 告知客户端:协商部分结束
  • 目前为止,客户端和服务器之间通过明文共享了 Client Random、Server Random、Server Params
  • 而且,客户端也已经拿到了服务器的公钥证书,接下来,客户端会验证证书的真实有效性
  • 6、Client Key Exchange
  • 用以实现 ECDHE 算法的另一个参数(Client Params)
  • 目前为止,客户端和服务器都拥有了 ECDHE 算法需要的 2 个参数: Server Params、Client Params
  • 客户端、服务器都可以使用 ECDHE 算法, 根据Server Params、Client Params 计算出一个新的随机密钥串:Pre-master secret,然后结合Server Params、Client Params 、Pre-master secret 生成一个主密钥,最后利用主密钥衍生出其他密钥,客户端发送用的会话密钥,服务器发送用的会话密钥
  • 7、Change Cipher Spec
  • 告知服务器:之后的通信会采用计算出来的会话密钥进行加密
  • 8、Finished
  • 包含连接至今全部报文的整体校验值(摘要),加密之后发送给服务器
  • 这次握手协商是否成功,要以服务器是否能够正确解密该报文作为判定标准
  • 9、Change Cipher Spec
  • 10、Finished
  • 到此为止,客户端服务器都验证加密解密没问题,握手正式结束,后面开始传输加密的 HTTP 请求和响应

你可能感兴趣的:(HTTPS)