概要:
随着互联网高速发展,网络安全也越来越被人重视,而传统的HTTP协议是明文传输,若HTTP请求被骇客截取,就能轻松获取其中内容,
存在极大安全隐患。为了解决这个问题,Netscape 公司制定了HTTPS协议,HTTPS可以将数据加密传输,也就是传输的是密文,即便黑客在传输过程中拦截到数据也无法破译,这就保证了网络通信的安全。
在了解HTTPS协议之前,我们首先要知道一些密码学的基础知识。
密码学基础
1:明文
由于明文没有经过加密保护,任何能够拦截或访问这些数据的第三方都可以直接读取它。因此,在传输敏感信息时,直接使用明文是极其不安全的。
2:密文
明文被某种加密算法加密之后,会变成密文,从而确保原始数据的安全。密文也可以被解密,得到原始的明文。
3:密钥
密钥是加密与解密算法中的关键参数,它在明文转换为密文或密文恢复为明文的过程中发挥了核心作用。
4:对称加密
对称加密又叫做私钥加密,即信息的发送方和接收方使用同一个密钥去加密和解密数据。对称加密的特点是算法公开、加密和解密速度快,适合于对大数据量进行加密,常见的对称加密算法有DES、3DES、TDEA、Blowfish、RC5和IDEA。
加密过程:明文 + 加密算法 + 私钥 => 密文
解密过程:密文 + 解密算法 + 私钥 => 明文
想象一下有一个箱子,里面放了一张藏宝图。这个箱子有两把完全一样的钥匙,A和B分别持有其中一把。A把藏宝图扣箱子后,用自己的钥匙锁住箱子,并通过快递把箱子寄给B。因为只有A和B各自拥有钥匙,其他人无法打开箱子。等B收到箱子后,用他的钥匙打开箱子,哇,里面是藏宝图!
5:非对称加密
非对称加密(也称为基准加密)相比对称加密提供了更高的安全性。为了形象化这个概念,可假设你有一个“信封”和两把钥匙:但是一把是公钥,另一把是私钥。公钥就像是一个信封的锁,任何人都可以拿到并用它来“锁”住信封,投入信息(比如一把信)。只有私钥匙(就是自己持有的钥匙)才能打开。这种加密方式的核心采用“全局加密,私钥解密”或“私钥签名,全局验证”。即使泄露,别人也无法解密因此,非加密比加密更安全,因为它避免了泄露带来的风险。
公钥加密的密文只能由私钥解密,过程为:明文 + 加密算法 + 公钥 => 密文, 密文 + 解密算法 + 私钥 => 明文
私钥加密的密文只能由公钥解密,过程为:明文 + 加密算法 + 私钥 => 密文, 密文 + 解密算法 + 公钥 => 明文
由于加密和解密使用了两个不同的密钥,这就是非对称加密“非对称”的原因。非对称加密的缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。在非对称加密中使用的主要算法有:RSA、Elgamal、Rabin、D-H、ECC
HTTPS协议
1HTTPS通信过程
HTTPS协议 = HTTP协议 + SSL/TLS协议,在HTTPS数据传输的过程中,需要用SSL/TLS对数据进行加密和解密,需要用HTTP对加密后的数据进行传输,由此可以看出HTTPS是由HTTP和SSL/TLS一起合作完成的。
HTTPS为了兼顾安全与效率,同时使用了对称加密和非对称加密。在传输内容之前,先使用非对称加密交换公钥和客户端密钥(这部分数据很小),要正式传输内容的时候使用客户端密钥进行对称加密。(考虑传输效率)
2HTTPS请求可以细分为8步:
1:客户端向服务器发起HTTPS请求,连接到服务器的443端口
2:服务器端有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务器端保存着私钥,不能将其泄露,公钥可以发送给任何人。
3:服务器将自己的公钥发送给客户端。
4:客户端收到服务器端的公钥之后,会对公钥进行检查,验证其合法性,如果发现发现公钥有问题,那么HTTPS传输就无法继续。严格的说,这里应该是验证服务器发送的数字证书的合法性,关于客户端如何验证数字证书的合法性,下文会进行说明。如果公钥合格,那么客户端会生成一个随机值,这个随机值就是用于进行对称加密的密钥,我们将该密钥称之为client key,即客户端密钥,这样在概念上和服务器端的密钥容易进行区分。然后用服务器的公钥对客户端密钥进行非对称加密,这样客户端密钥就变成密文了,至此,HTTPS中的第一次HTTP请求结束。
5:客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端密钥发送给服务器。
6:服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后的明文就是客户端密钥,然后用客户端密钥对数据进行对称加密,这样数据就变成了密文。
7:然后服务器将加密后的密文发送给客户端。
8:客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,得到服务器发送的数据。这样HTTPS中的第二个HTTP请求结束,整个HTTPS传输完成。
整个过程如下图:

总结
HTTPS = HTTP + TLS/SSL,既对HTTP传输过程进行加密,保障数据安全。
HTTPS同时使用了非对称加密和对成加密
非对称加密:客户端发起HTTPS请求 -> 服务端返回公钥给客户端 -> 客户端生成一个随机值并使用公钥进行加密 -> 服务端收到加密内容后使用私钥解密得到客户端随机值
对称加密:服务端使用随机值对传输内容加密 -> 客户端收到加密内容用之前生成的随机值解密。
这样形成双重加密或者是多重加密,相较于HTTP更加的安全。现在绝大多数的网站都是适用的HTTPS.