https原理和流程

https原理和流程

https实际上是使用SSL/TLS对传输数据进行加密的HTTP通信.
如果不使用SSL/TLS的话, 所有的数据是明文传输, 很容易被截取进行中间人攻击.带来的风险有:

  1. 窃听风险: 第三方可以获知通信内容.
  2. 篡改风险: 第三方可以修改通信内容.
  3. 冒充风险: 第三方可以冒充他任身份进行通信.

使用SSL/TSL协议可以规避这些风险:

  1. 所有信息都是加密传播,第三方无法窃听。
  2. 具有校验机制,一旦被篡改,通信双方会立刻发现。
  3. 配备身份证书,防止身份被冒充。

基本的运行过程:

基本的运行过程是, 客户端先向服务器索要公钥, 然后用公钥加密信息, 服务器收到密文后, 用自己的私钥解密.
但是这里面有两个个问题:

  1. 如何保证公钥可信?

解决方法:
公钥放在数字证书中, 证书颁发机构作为公钥背书.

  1. 公钥加密计算量太大,效率不高.

解决方法:
每一次会话, 单独生成一个对话密钥(session-key), 用他来解密信息.
由于对话密钥是对称加密, 所以加密和解密速度都非常快.
服务器公私钥只用来加密解密对话密钥.

具体的流程:

开始加密通信之前,客户端和服务器首先必须建立连接和交换参数,这个过程叫做握手(handshake)。

假定客户端叫做爱丽丝,服务器叫做鲍勃,整个过程如下:

  1. 爱丽丝给出协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的加密方法。
  1. 鲍勃确认双方使用的加密方法,并给出数字证书、以及一个服务器生成的随机数(Server random)。
  1. 爱丽丝确认数字证书有效,然后生成一个新的随机数(Premaster secret),并使用数字证书中的公钥,加密这个随机数,发给鲍勃。
  1. 鲍勃使用自己的私钥,获取爱丽丝发来的随机数(即Premaster secret)。
  1. 爱丽丝和鲍勃根据约定的加密方法,使用前面的三个随机数,生成"对话密钥"(session key),用来加密接下来的整个对话过程。

其中关键是第三步, 由客户端生成的随机数, 使用公钥加密. 即使中间人获得这个数据, 因为没有私钥, 也无法获得通信内容.

你可能感兴趣的:(https原理和流程)