HTTPS 概述

 

HTTPS

由于HTTP报文在网路上是以明文的方式传递的,因此很多时候在安全方面无法满足商用的要求,无法保证数据不被中间人截取和篡改(中间人攻击)。而HTTPS协议在传递报文前进行了身份认证、数据加密,这就保证了HTTP报文的可靠性、数据完整性、数据加密性

对称加密

我们可以使用对称加密技术(DES,3DES,AES)对HTTP报文进行加密;AES加密技术是现在最流行且有效的加密算法,可以可靠的保证密文不被中间人解析,只要对称秘钥不泄漏。

如果中间人截取了对称秘钥,完全可以换成自己的秘钥传递给另一端,这样就不能解决中间人攻击。那么问题就变为怎么安全的传递对称秘钥?

对称加密的问题

这个时候我们可以非对称加密技术加密对称秘钥,然后再在网路上传递

非对称加密

非对称加密包含两个秘钥:公钥和私钥。公钥可以将私钥加密的数据明文化,私钥可以将公钥加密的数据明文化。

首先由客户端向服务端发出握手请求;接着由服务端返回公钥;客户端受到公钥,生成加密报文用的对称秘钥,由公钥加密传递给服务端;最后服务端受到对称秘钥用私钥解析出来,之后就可以进行正常的数据交互了。

但是这还是不能避免中间人攻击,如果中间人劫持了公钥,再生成自己的公钥传递给客户端。这样中间人和服务端建立连接,客户端和中间人建立连接,中间人攻击还是构成了。

非对称加密的问题

因此客户端必须要判断公钥的可靠性和完整性(即公钥是不是确实从服务端传递来的,而没有被篡改);为解决这个问题,我会可以引入可靠的第三方CA机构

数字证书

CA机构即证书颁发机构,服务端会事先向CA机构申请数字证书。

数字证书的使用

数字证书的作用

  • 认证正在访问的网站(是否为钓鱼网站)

  • 保证数据的私密性和可靠性

数字证书的申请

  1. 首先服务端会生成自己的公钥和私钥,然后拿着公钥服务端的一些信息向CA机构申请数字证书

  2. CA机构拿着公钥和服务端信息通过Hash算法生成消息摘要,然后将消息摘要用自己的私钥加密,生成后的密文即数字签名。数字签名和原本的公钥及服务端信息组成数字证书

  3. 最后服务端拿到数字证书,等待客户端的握手请求

数字证书怎么保证交互的可靠性,完整性及私密性

  1. 服务端受到握手请求后,首先会将数字证书传递给客户端
  2. 我们的电脑和浏览器中已经内置了一部分权威机构的根证书,这些根证书中包含了CA的公匙。 数字证书包含公钥,服务端信息和数字签名。客户端首先会将公钥,服务端信息通过Hash算法生成一份消息摘要;然后将数字签名用CA的公钥解密出一份消息摘要;对比两份消息摘要,如果不一致即公钥被篡改,停止握手。
  3. HASH算法的不可逆性保证了消息摘要无法篡改,CA机构的非对称加密保证了公钥来源的可靠性

HTTPS的握手

HTTPS的握手

参考文档

漫画:什么是 HTTPS 协议?

一篇文章读懂HTTPS及其背后的加密原理

原文章地址

https://github.com/ExistOrLive/DocumentForLearning/blob/master/iOS/Objective_C/%E7%BD%91%E7%BB%9C/HTTP/%E7%99%BE%E5%BA%A6HTTPS%E8%BF%87%E7%A8%8B.md