Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
Moosphan opened this issue Jun 5, 2019 · 8 comments
Open

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

Moosphan opened this issue Jun 5, 2019 · 8 comments

Comments

@Moosphan
Copy link
Owner

Moosphan commented Jun 5, 2019

No description provided.

@gabyallen
Copy link

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

@zhaoerlei1989
Copy link

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"

@yangfanggang
Copy link

学习了 楼上的

@Fritz-Xu
Copy link

Fritz-Xu commented Jun 7, 2019

楼上已经说的很多了,这里补充下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 了

@xiaoyunfei
Copy link

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

@senlinxuefeng
Copy link

@mlinqirong
Copy link

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

1 similar comment
@mlinqirong
Copy link

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

8 participants