1.前言
HTTP 的最大弊端——不安全。
HTTP 在传输数据的过程中,所有的数据都是明文传输,没有安全性可言
1.1 加密算法
HTTPS 解决数据传输安全问题的方案就是使用加密算法,具体来说是混合加密算法,也就是对称加密和非对称加密的混合使用
1.1.1 对称加密
对称加密,顾名思义就是加密和解密都是使用同一个密钥
,常见的对称加密算法有 DES、3DES 和 AES 等,其优缺点如下:
- 优点:算法公开、计算量小、加密速度快、加密效率高,适合加密比较大的数据;
- 缺点:
- 交易双方需要使用相同的密钥,也就无法避免密钥的传输,而
密钥在传输过程中无法保证不被截获
,因此对称加密的安全性得不到保证; - 每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一密钥,这会使得发收信双方所拥有的钥匙数量急剧增长,
密钥管理成为双方的负担
。对称加密算法在分布式网络系统上使用较为困难,主要是因为密钥管理困难,使用成本较高;
在传输数据之前先由一方把密钥传给另一方,那么在此过程中密钥就很有可能被截获
,这样一来加密的数据也会被轻松解密。这就是对称加密的缺点。
- 交易双方需要使用相同的密钥,也就无法避免密钥的传输,而
1.1.2 非对称加密
非对称加密,顾名思义,就是加密和解密需要使用两个不同的密钥:公钥(public key)
和私钥(private key)
。公钥与私钥是一对,如果用公钥对数据进行加密
,只有用对应的私钥才能解密
;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公钥对外公开;得到该公钥的乙方使用公钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的私钥对加密后的信息进行解密。
如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,只是全世界只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西。常用的非对称加密算法是 RSA 算法,想详细了解的同学点这里:RSA 算法详解一、RSA 算法详解二,其优缺点如下:
- 优点:算法公开,加密和解密使用不同的钥匙,私钥不需要通过网络进行传输,安全性很高。
- 缺点:
计算量比较大
,加密和解密速度相比对称加密慢很多。
由于非对称加密的强安全性,可以用它完美解决对称加密的密钥泄露问题,效果图如下:
上面这个流程图正是 HTTPS 的雏形,HTTPS 正好综合了这两种加密算法的优点,不仅保证了通信安全,还保证了数据传输效率。前面用非对称加密将公钥(public key)
传递,传递后使用对称加密每次进行传递。解决了对称加密的缺点(密钥被截获,公钥被截获也需要私钥进行解密),也解决了非对称加密每次都进行解密计算量大的问题
2. HTTPS 原理详解
HTTPS 并非独立的通信协议,而是对 HTTP 的扩展,保证了通信安全,二者关系如下:
也就是说 HTTPS = HTTP + SSL / TLS。
接下来就是最重要的 HTTPS 原理解析了。
HTTPS 的整个通信过程可以分为两大阶段:证书验证和数据传输阶段,数据传输阶段又可以分为非对称加密和对称加密两个阶段。具体流程按图中的序号讲解。
客户端请求
HTTPS 网址,然后连接到 server 的 443 端口 (HTTPS 默认端口,类似于 HTTP 的80端口);- 采用 HTTPS 协议的服务器必须要有一套数字 CA (Certification Authority)证书,证书是需要申请的,并由专门的数字证书认证机构(CA)通过非常严格的审核之后颁发的电子证书 (当然了是要钱的,安全级别越高价格越贵)。颁发
证书
的同时会产生一个私钥和公钥
。私钥由服务端自己保存,不可泄漏。公钥则是附带在证书的信息中,可以公开的。证书本身也附带一个证书电子签名,这个签名用来验证证书的完整性和真实性,可以防止证书被篡改; - 服务器
响应客户端请求
,将证书传递给客户端,证书包含公钥和大量其他信息,比如证书颁发机构信息,公司信息和证书有效期等。Chrome 浏览器点击地址栏的锁标志再点击证书就可以看到证书详细信息; - 客户端
解析证书
并对其进行验证。如果证书不是可信机构颁布,或者证书中的域名与实际域名不一致,或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。就像下面这样:
如果证书没有问题,客户端就会从服务器证书中取出服务器的公钥A
。然后客户端还会生成一个随机码 KEY,并使用公钥A将其加密
;
5. 客户端把加密后的随机码 KEY 发送给服务器
,作为后面对称加密的密钥
。
6. 服务器在收到随机码 KEY 之后会使用私钥B将其解密
。经过以上这些步骤,客户端和服务器终于建立了安全连接,完美解决了对称加密的密钥泄露问题,接下来就可以用对称加密愉快地进行通信了。
7. 服务器使用密钥 (随机码 KEY)对数据进行对称加密
并发送给客户端,客户端使用相同的密钥 (随机码 KEY)解密
数据。
8. 双方使用对称加密愉快地传输所有数据。
3. 总结
HTTPS 和 HTTP 的区别:
- 最最重要的区别就是
安全性
,HTTP 明文传输,不对数据进行加密安全性较差。HTTPS (HTTP + SSL / TLS)的数据传输过程是加密的,安全性较好; - 使用 HTTPS 协议需要
申请 CA 证书
,一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、DigiCert 和 GlobalSign 等; HTTP 页面响应速度
比 HTTPS快
,这个很好理解,由于加了一层安全层,建立连接的过程更复杂,也要交换更多的数据,难免影响速度;- 由于
HTTPS
是建构在 SSL / TLS 之上的 HTTP 协议,所以,要比 HTTP更耗费服务器资源
; - HTTPS 和 HTTP 使用的是完全不同的连接方式,用的端口也不一样,前者是 443,后者是 80;
HTTPS 的缺点:
- 在相同网络环境中,HTTPS 相比 HTTP 无论是
响应时间还是耗电量
都有大幅度上升; - HTTPS 的
安全是有范围
的,在黑客攻击、服务器劫持等情况下几乎起不到作用; - 在现有的证书机制下,中间人攻击依然有可能发生;
- HTTPS
需要更多的服务器资源
,也会导致成本的升高;