Moosphan/Android-Daily-Interview

2019-06-06:请简述 Http 与 Https 的区别?

Moosphan opened this issue · 8 comments

2019-06-06:请简述 Http 与 Https 的区别?

HTTPS和HTTP的区别主要如下:
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
最后一点在Android 9.0 如果用http进行传输,需要在application节点下设置 android:usesCleartextTraffic="true"

学习了 楼上的

楼上已经说的很多了,这里补充下https的连接流程:
1.当 TCP 的3次挥手完成连接时,客户端将一个16位的随机数以及自己的支持那些AES,RAS加密的版本发送给服务器
2.服务器收到客户端的信息后,会用证书加密以下数据:服务器生成的16位随机数,服务器使用的AES版本,RAS加密的密钥,发送到客户端
3.客户端接收到服务器的证书加密包后,会从依据情况,从系统本地或应用本地中寻找解密用的密钥(微信支付宝的加密也是这种模式,微信支付宝是直接找厂家合作将RAS的key烧录到手机的安全区里面),解密成功得到数据后,那么客户端就会生成第三个随机数,并且使用3个16位随机数在本地生产一个 AES 加密的密钥,客户端会使用这个 AES 密钥加密一个约定好的数据(字符串),使用服务器的 RAS 加密密钥将第三个随机数以及 AES 加密的数据包返回给服务器
4.服务器收到加密的数据包并顺利解密得到第三个随机数后,也会在本地生产一个 AES 密钥,如果能顺利解密客户端的 AES 加密包,那么就会给客户发送一个可以进行安全通讯的通知,此时客户端和服务器都使用本地生成的 AES 密钥进行 http报文的传输

可以看出,https 的优势绝对安全,http报文加密用的 AES 密钥是在两端本地生成的,用完就会抛弃,黑客只有知道了证书的密钥才可能盗取到信息

而 https 的缺点也很明显,那就是每次通讯之前,要花费2~3个RTT(客户端与服务器来回一次称为1个RTT,run trip time)的时间,耗时变久(5g普及后不是问题)以及对服务器的负担(这个才是硬骨头),那么日活上百万千万,甚至过亿的app,全部使用 https 的话,对服务器性能是一个考验,这时候或者可以考虑下 https 的 Socket 了

主要区别:
1、http传输数据明文,https传递的数据是加密后的数据;
2、http不需要证书,https需要证书;
3、http连接是无状态的,但是https的连接是有状态的,需要得到网络协议的认可;
Android 9.0 以后使用http传输数据,需要AndroidMainfests设置networksecurityconfig配置

http 使用明文传输 端口80
https 使用ssl加密传输 端口443

http 使用明文传输 端口80
https 使用ssl加密传输 端口443