前言
HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer), 相比于HTTP多了个s(SecureSocket Layer),这个s指的是SSL/TSL,因HTTPS 在HTTP 的基础下加入SSL/TSL层,也被称之为HTTP的安全版。
http的缺陷
http传输数据是明文传输的,也就是未加密的,通过简单的抓包手段可以轻易的查看到传输的数据、以及修改传输的数据,甚至可以拦截请求冒充服务器。
https为了解决这点加入了SSL/TSL层:
SSL/TLS
SSL(Secure Sockets Layer 安全套接字协议)、TSL(Transport Layer Security 传输层安全)
TLS是SSL的继任者,两者差别不大,下文统一用SSL来表示。
在讲SSL流程之前先来看看两个加密方式:
对称加密与非对称加密
对称加密
对称加密指的就是加密和解密使用同一把钥匙,用钥匙A加密的只能用钥匙A解开。
非对称加密
对称加密用的是A和B两把钥匙,用钥匙A加密的只能用钥匙B解密,用B加密的只能用钥匙A来解密,
这种方式相对非对称加密非常安全,一把钥匙放在自己手里用来解密,一把钥匙给别人用来加密,即使数据被黑客拦截也没用因为解密的钥匙在自己手里,著名的RSA加密算法用的就是非对称加密。
对比
非对称加密比对称加密要安全,但加解密计算量太大如果https每次请求都使用非对称加密会影响请求速度,所以SSL中的实现是将两种加密方式结合起来。
SSL/TLS运行过程
经过上图4次会话后面所有传输都将使用普通的http协议,只过不所有转输的内容都是经过加密后的,下面分析上图的几个重点:
如何校验证书真伪?
图中第二步服务器将证书发送给客户端,客户端拿到证书如何校验真伪?
-
服务器向一个有公信力的认证中心(CA)申请一本证书,证书上有网站的域名等信息
-
证书在传输过程中可以放个人信息,将这些信息使用hash生成一个签明,再在对签明使用以CA机构提供的私钥进行非对称加密
-
客户端收到证书会先看有没有过期,以及是不是这个域名的证书
-
然后会在操作系统找到对应的证书的公钥进行解密,得出hash签名,再将证书中的个人信息进行签明,两个签明一对比一致,说明证书合法。
服务器给的公钥放在哪里?
图中第三步通过公钥加密信息,这个公钥存放在哪里呢?
答: 为了防止公钥被篡改,所以将公钥存放在证书中,客户端验证证书有效,再对比hash签名一至则公钥就没有被篡改过。
为什么要使用会话密钥来加密数据?
答: 会话密钥顾名思义就是每次会话都会生成一个,之所以使用会话密钥加密数据而不使用公钥加密是因为它是对称加密速度快,公钥加密加密大量数据比较慢所以只用来加密会话密钥。
公钥加密用来传输密钥,会话密钥用来传输数据,SSL就是采用这两种方式的组合完成加密的。
完!
下篇文章: 接入https(实践篇)