http 与 https 的区别以及加密详解

一、http与https的区别:

  1. http和https是两种通信方式
  2. http默认采用80作为通讯端口,对于传输采用不加密的方式,https默认采用443,对于传输的数据进行加密传输
  3. https协议需要到CA申请证书
  4. HTTPS协议可以理解为HTTP协议的升级,就是在HTTP的基础上增加了数据加密。在数据进行传输之前,对数据进行加密,然后再发送到服务器。这样,就算数据被第三者所截获,但是由于数据是加密的,所以你的个人信息是安全的。这就是HTTP和HTTPS的最大区别。

二、原理详解

(1)、http传输原理讲解

HTTP协议是一种使用明文数据传输的网络协议。
我们通过一个简单的例子来描述:
http 与 https 的区别以及加密详解
上图应该是我们最期望看到的结果,两者得到了真爱。但是,这种情况真的是我们想的那样吗?答案很简单,不是的,因为产生了第三者!看下图:
http 与 https 的区别以及加密详解
本来客户端想发送我喜欢你,但是内容被黑客截取,黑客篡改了内容,给服务端发送了我讨厌你,一段美好的姻缘就此断送了。
为什么黑客可以得到呢?客户端向服务端发送的内容都是暴露的,发送的是什么,传输的就是什么,所以黑客可以很容易的得到内容,无需**。

(2)、https传输原理讲解以及加密过程讲解

为了避免上图情况发生,我们引入了https(http+ssl,也就是在http外面加了一层ssl保护壳)

HTTPS协议可以理解为HTTP协议的升级,就是在HTTP的基础上增加了数据加密。在数据进行传输之前,对数据进行加密,然后再发送到服务器。
那么https是怎么加密的呢?下面我们介绍两种加密方式:对称加密和非对称加密
1、对称加密的原理:
原理图:
http 与 https 的区别以及加密详解
客户端在向服务端发送请求的时候采用了一种加密算法(图中的**$)对"我爱你"进行了加密,加密后的内容为:[email protected]##!!,然后服务端获取到相关内容后通过相对应的解密算法可以将内容解密为"我爱你",从而保证了信息的安全性。但是这种方法真的安全吗?结果显然不是,假如第三方获取到** $呢?看下图:
http 与 https 的区别以及加密详解
这相当于没有加密,因此使用同一个**是无法解决问题的,因此引入了非对称加密,使用不同的秘钥加解密。这就为对称加密的协商过程进行加密。

2、非对称加密
这里涉及到公钥私钥特点是私钥加密后的密文,只要是公钥,都可以解密,但是反过来公钥加密后的密文,只有私钥可以解密。私钥只有一个人有,而公钥可以发给所有的人。
看例子:

A(客户)想给B(服务器)发送一段文字,但是不想让别人看到,因此想使用非对称加密方法来加密这段文字,当然,B需要有一对公钥和私钥:
①、B将他的公钥发送给A
②、A用B给他的公钥加密这段文字,然后传给B
③、B用他的私钥解密A发过来的消息,这里要强调的是,只要B的私钥不泄露,这封信就是安全的,即使落在别人手里,也无法解密。
通过这几步,B就能成功收到A发送的信息,同时又达到了保密的目的。

http 与 https 的区别以及加密详解
在这里解释一下:

对于https加密的过程,我们首先介绍的对称加密,采用对称加密进行通信存在秘钥协商过程的不安全性,因此我们采用了非对称加密算法解决了对协商过程的加密,因此https是集对称加密和非对称加密为一体的加密过程

3、数字证书
为什么会说到数字证书?其实上面的过程存在一些问题,看下图:
http 与 https 的区别以及加密详解
客户端获取公钥最最直接的方法是服务器端将公钥发送给每一个客户端用户,但这个时候就出现了公钥被劫持的问题,如上图。那么如何安全的获取公钥,并确保公钥的获取是安全的? 那就需要用到终极武器了:SSL 证书(需要购买)和CA机构。

原理图如下:
http 与 https 的区别以及加密详解
服务器发送了一个SSL证书给客户端,SSL 证书中包含的具体内容有证书的颁发机构、有效期、公钥、证书持有者、签名,通过第三方的校验保证了身份的合法,解决了公钥获取的安全性

二、总结

HTTPS要使客户端与服务器端的通信过程得到安全保证,必须使用的对称加密算法,但是协商对称加密算法的过程,需要使用非对称加密算法来保证安全,然而直接使用非对称加密的过程本身也不安全,会有中间人篡改公钥的可能性,所以客户端与服务器不直接使用公钥,而是使用数字证书签发机构颁发的证书来保证非对称加密过程本身的安全。这样通过这些机制协商出一个对称加密算法,就此双方使用该算法进行加密解密。从而解决了客户端与服务器端之间的通信安全问题。

参考博客: https://www.cnblogs.com/qiangxia/p/5261813.html