表象上的区别
- HTTP对应80端口,HTTPS对应443端口
- HTTP明文传输,效率较高但容易被劫持信息,HTTPS密文传输,速度较慢但更安全
背后的区别
SSL
HTTPS是在HTTP协议上加了一层SSL加密协议,所以HTTPS可以理解为
HTTP
+SSL
。
但现在实际上用的是SSL的升级版本协议TSL,由于SSL协议出现较早,所以SSL依然是HTTPS的代名词加密相关介绍
我们试想一下,我们在考虑对称加密的密文传输的时候会是这样:
浏览器发送
请求+秘钥
给服务端,服务端用秘钥加密后的信息返回给浏览器,然后浏览器再用秘钥解密。是不是有哪里不对?我们既然知道在进行网络传递的时候信息会被劫持盗取,万一这里的秘钥也被人劫持了,那密文岂不是被直接破解了?要不我们事先再把这个秘钥进行一次加密?然后秘钥的解密还是需要另一个秘钥,如此往复,子子孙孙,无穷尽也。。。
为了防止这种情况的发生,TSL/SSL协议在设计之时,采用了这样的方案,对于直接加密解密数据的秘钥进行一次
非对称加密
。对称加密时,加密和解密用的是同一个秘钥;非对称加密相反,有一个公钥和一个私钥,加密方使用公钥对数据进行加密,解密方使用对应的私钥解密密文。在TSL/SSL协议里就是,服务端返回一个
公钥
给浏览器,浏览器生成一个随机数,作为文档数据加密的数据秘钥
,用公钥
对数据秘钥
进行加密,返回给服务端,服务端收到后再用自己藏好的私钥
对数据秘钥
进行解密,然后对要传输的数据用数据秘钥
进行对称加密返回给浏览器。问题1:非对称加密是个什么样的机制?
答1:原理可以类比『两个大质数A和B的乘积为C,我们可以很容易从A和B得到C,但是从C得到A和B就很难』。这里C就是公钥,A和B就是秘钥。问题2:为什么不直接对数据进行非对称加密?
答2:非对称加密效率较低,如果对整个页面里的数据都进行非对称加解密的话,浏览器和服务端估计都会很痛苦。。所以只对数据秘钥
进行加密,然后再用数据秘钥
进行大量数据的对称加解密。工作过程——握手
HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,这次握手就是用来确定两者之间的加解密的信息。过程简单如下:
- 浏览器将自己支持的一套加密规则发送给网站。
- 网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。
- 获得网站证书之后浏览器要做以下工作:
- 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。
- 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密。
- 使用约定好的HASH计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站。
- 网站接收浏览器发来的数据之后要做以下的操作:
- 使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。
- 使用密码加密一段握手消息,发送给浏览器。
- 浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。