文章目录

  • 1. 概述
  • 2. 数字证书
  • 3. 连接过程
  • 3.1. 过程概括
  • 3.2. 具体过程
  • 4. 参考资料
  • 4.1. 推荐资料


1. 概述

https是http+SSL(TLS)的结合体,SSL(现在升级为TLS了)是一种独立的协议,可以与其它协议结合在一起。https采用了非对称加密+对称加密结合的方式来工作(主要是ssl来做),因为非对称加密速度慢,所以先利用非对称加密来传输对称加密的密钥,然后再使用对称加密的方式传输。在ssl建立了安全的通信线路后就可以在这条线路上进行http通信了。

对称密钥加密(如AES,RC)的缺点是发送密钥就有被窃听的风险,但不发送,对方就无法解密。再说,如果密钥能够安全发送,那数据也应该能安全到达。采用非对称密钥加密很好的解决了这个问题。

2. 数字证书

非对称加密无法证明公钥本身没有经过伪造,于是可以使用由数字证书认证机构等颁发的公钥证书。

数字证书是一个经证书授权中心数字签名的包含公钥拥有者信息以及公钥的文件。最简单的证书包含一个公钥、名称以及证书授权中心的数字签名。数字证书还有一个重要的特征就是只在特定的时间段内有效。

数字证书的生成是这样的:服务端将自己的公钥及相关信息交给证书机构,机构使用其私钥加密服务端的公钥及相关信息,而客户端(浏览器)在安装的时候就自带了权威数字证书机构的公钥,可以利用证书机构的公钥从数字证书中提取出服务器端的公钥。

3. 连接过程

3.1. 过程概括

  1. 客户端发送请求到服务端
  2. 服务端发送数字证书
  3. 客户端解析并利用证书机构的公钥从证书中取出服务端的公钥
  4. 客户端生成随机对称密钥(随机数),并利用公钥加密发送给服务端
  5. 服务端用私钥解密取出对称密钥。
  6. 双方采用对称加密的方式进行加密传输的http数据,收到后利用对称密钥解密

这里省却了验证异常的过程,正常的连接大致就是这样。

3.2. 具体过程

  1. 客户端通过发送 Client Hello 报文开始 SSL通信。报文中包含客户端支持的 SSL的指定版本、加密组件(Cipher Suite)列表(所使用的加密算法及密钥长度等)。
  2. 服务器可进行 SSL通信时,会以 Server Hello 报文作为应答。和客户端一样,在报文中包含 SSL版本以及加密组件。服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的。
  3. 之后服务器发送 Certificate 报文。报文中包含公钥证书
  4. 最后服务器发送 Server Hello Done 报文通知客户端,最初阶段的 SSL握手协商部分结束。
  5. SSL第一次握手结束之后,客户端以 Client Key Exchange 报文作为回应。报文中包含通信加密中使用的一种被称为 Pre-master secret随机密码串。该报文已用步骤 3 中的公钥进行加密
  6. 接着客户端继续发送 Change Cipher Spec 报文。该报文会提示服务器,在此报文之后的通信会采用 Pre-master secret 密钥加密。
  7. 客户端发送 Finished 报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确解密该报文作为判定标准。
  8. 服务器同样发送 Change Cipher Spec 报文。
  9. 服务器同样发送 Finished 报文。
  10. 服务器和客户端的 Finished 报文交换完毕之后,SSL连接就算建立完成。当然,通信会受到 SSL的保护。从此处开始进行应用层协议的通信,即发送 HTTP 请求。
  11. 应用层协议通信,即发送 HTTP 响应。
  12. 最后由客户端断开连接。断开连接时,发送 close_notify 报文。

摘录自:《图解HTTP》7.2.5小节