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

学习总结(3)--理解HTTPS #18

Open
Pomelo1213 opened this issue Feb 28, 2018 · 0 comments
Open

学习总结(3)--理解HTTPS #18

Pomelo1213 opened this issue Feb 28, 2018 · 0 comments
Labels
HTTP HTTP

Comments

@Pomelo1213
Copy link
Owner

HTTPS概念


超文本传输安全协议(Hypertext Transfer Protocol Secure 缩写为HTTPS)是一种网络安全传输协议。在计算机网络上,HTTPS借由超文本传输协议进行通信。

HTTPS还被称为HTTP over TLS, HTTP over SSL。顾名思义,是利用SSL/TLS来加密数据包,不和HTTP那样裸奔在TCP上面。

什么是SSL/TLS


  • SSL是指安全套接字层,简而言之,它是一项标准技术,可确保互联网连接安全,保护两个系统之间发送的任何敏感数据,防止坏蛋读取和修改任何传输信息,包括个人资料。两个系统可能是指服务器和客户端(例如:浏览器和购物网站),或两个服务器(例如:含有个人信息的应用程序)。
  • 这样可确保用户和站点之间,或两个系统之间传输的数据无法被读取。它使用加密算法打乱传输中的数据,防止数据通过连接传输时被黑客读取。这里所说的数据是指任何敏感或者个人信息,例如信用卡号等。
  • TLS(传输层安全)是更为安全的升级版SSL。由于SSL这一术语更为常用,因此我们仍然将我们的安全证书称作SSL。
  • 如果某个网站受SSL证书保护,其相应的URL中会显示HTTPS(茶农文本传输安全协议)。单机浏览器地址栏的挂锁图标,即可查看证书详细信息,包括颁发机构和网站所有者的公司名称。

加密方式


  • 对称加密:加密和解密数据使用同一个密钥。这种加密方式的优点是速度很快,常见的对称加密算法有AES。
  • 非对称加密:加密和解密还是用不同的密钥,叫公钥和私钥。数据用公钥加密后必须使用私钥解密,数据用私钥加密后必须使用公钥解密。一般来说私钥自己保留好,把公钥公开给别人,让别人拿到自己的公钥加密数据后发送给自己,这样只有自己才能解密。这种加密方式的特点是速度慢,CPU开销大,常见的非对称加密算法有:RSA。
  • Hash:hash是把任意长度数据经过处理变成一个长度固定唯一的字符串,但任何人拿到这个字符串无法反向解密成原始数据(因为长度固定,处理后数据有所丢失,无法还原),hash常用来验证数据的完整新。常见Hash算法有MD5(不安全)、SHA1、SHA256。

需求


因为在信道中传输时,无法保证安全可靠,所以需要对数据进行加密,如果不对信息进行加密,坏人就可以轻易拿你的数据做坏事,这是不被允许的。那么怎么保证我们的数据安全性呢?

  • 使用对称加密?客户端加密后,服务端解密,看似很方便,其实不然。我们的加密方式怎么告诉服务端呢?若直接在信道中加上加密方式,这样坏人就能截获我们的加密方式,然后解密我们的数据包,这和不加密有啥区别?pass!!
  • 使用非对称加密?客户端生成私钥和公钥,将信息用私钥加密数据包,让服务端用公钥解密,这样服务端和客户端也可以发送信息沟通。可是,客户端用私钥加密后,在信道中截获到公钥,客户端发送的数据都可以用公钥解密,客户端发送的数据一览无余,私密信息就被别人知道了。pass!!!

怎么办呢?


于是,就有了这样一种方式,客户端和生成自己的私钥和公钥,于是客户端先发送一个简单的数据包,将客户端的公钥包在里面,服务端收到后,生成一个对称加密的秘钥,用公钥将其加密,再发送给客户端,然后客户端就可以使用这个对称加密的密钥和服务端愉快的数据交流了。

还有问题吗?


我们说过信道里面,不可靠,也不安全。如果坏人截取了客户端的数据包,并且将其中客户端的公钥偷偷替换成自己生成的公钥,并藏在数据包里面,然后发给服务端,那么服务端生成的对称密钥就会被坏人知道,这样坏人就可以为所欲为了。怎么办?

CA证书


然后出现了CA证书这种东西,大型认证机构生成自己的私钥和公钥,。那么客户端Hash处理数据包(包含客户端的公钥)并向认证机构请求了帮助,让他们用私钥帮我们加密这个数据包,然后发送给服务端。如果有坏人截取,也无法进行修改,因为这是认证机构的私钥加密,如果修改了,服务端收到后,发现用认证机构的公钥解密出来是一堆乱码,就清楚中间有人捣鬼,就会丢弃这个数据包。

服务端收到后,先用认证机构的公钥解(保证了这个公钥是客户端的),然后将其中的客户端公钥和其他数据进行Hash与原来的Hash进行比对,如果一样就到了客户端的公钥。然后与上面相同的操作就好啦。


HTTPS之所以安全,其中作出了许多的加密,这只是最简单的一种形式。
那么,为什么还有人使用HTTP呢?因为CA证书不会免费的发放给你,是需要你花钱的。一些小的个人网站,没有那么大的需求,自然不会使用HTTPS。

@Pomelo1213 Pomelo1213 added the HTTP HTTP label Aug 21, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
HTTP HTTP
Projects
None yet
Development

No branches or pull requests

1 participant