我在之前的文章中给大家介绍过HTTP
,接下来给大家详细的介绍一下HTTPS
HTTPS
相当于HTTP
的孪生兄弟~,HTTPS
在HTTP
的基础之上,引入了一个加密层。
在上篇介绍HTTP
的文章中,和大家介绍过运营商劫持事件,可能很多小伙伴没看过之前的文章,在这里就给大家再简单的介绍一下
大家有时候在网站上下载东西的时候应该遇到过这样一种情况吧,明明我点击下载的时候是正经的程序,却老是下载到别的乱七八糟的软件。
之前介绍的HTTP
是明文传输,传输的数据,是容易被获取的,也容易被篡改的,引入HTTPS
,对数据加密,也就能更好的保护数据的安全。
加密是一个非常复杂的事情,计算机领域中专门有一个学科,叫做“密码学”,在密码学真的成为一个现代学科之前,其实还是比较单纯简单的,那时候基本上都是“古典加密”。密码学与其说是一个和计算机相关的学问,不如说是一个和数学相关的学问。
基本的流程大概就是有三个部分:
明文:要传输的原始信息
密文:整个奏折~~即使被别人获取到了,拿着密文,别人也看不出有啥毛病
密钥:通过密钥,就可以将明文转换成密文,或者把密文转换成明文。
加密和解密这件事情,本身是一个和数学密切相关的事情,咱们此处,只能简单讨论“流程”,无法讨论加密解密的“实现细节”,加密之后,也不是就绝对安全,只能说破解起来计算量很大,成本很高。有些数据经过加密之后,哪怕使用当前最牛逼的计算机,破解起来也需要个几十年甚至上百年,这种我们就默认为是安全的~只要破解成本高于数据本身的价值,就是安全的,就比如你印假钞,造一个100块钱的假钞,但是你实际的成本是110,你说你还会去造吗?
HTTPS
中引入的加密层,称为SSL/TLS
在SSL里面,涉及到的加密操作,其实主要是两种方式
1.对称加密:使用同一个密钥,既可以进行加密操作,也可以进行解密操作。
2.非对称加密~~
对称性加密可靠性不强,很容易被黑客攻击,因为密钥很容易就被黑客拿到了。
经过上面的简单分析,就明确了,使用对称加密,最大的问题,在于说密钥得能够传递过去,如果明文传递,是不行的,必须针对这个密钥再进行加密~~这里解决问题的关键,就是需要引入,非对称加密了。
有两个密钥,分别叫做公钥和私钥。
公钥,就是人人都能获取到的
私钥,就是只有自己才知道的~
这样的话,我们就可以使用公钥来加密,再使用私钥来解密。或者是使用私钥来加密,使用公钥来解密,
基于非对称加密,就可以让服务器自己生成一对公钥和私钥,公钥发出去(人人都能拿到),私钥自己保存,客户端生成一个对称密钥,客户端就可以使用服务器的公钥,对对称的密钥进行加密,然后把数据传给服务器,服务器再通过私钥进行解密~
现在可能有的小伙伴就在想了既然非对称加密这么好使,还要对称加密干啥呢?直接非对称加密一把梭不就好了吗?
但是实际现实中,对称加密的计算开销《《 对称加密的~
如果只是少来少去的用用这个非对称加密,成本还好,但是如果所有的数据都走非对称加密,这个事成本就太大了
上述的非对称加密除了多花开销以外,貌似就很完美了,其实不然,这里还存在一个非常巨大的漏洞,服务器要把自己的公钥放回给客户端,在这个操作中,就可能会涉及到一个非常经典的”中间人攻击“
既然存在中间人攻击,如何解决这个问题??关键要点,得让客户端能够确认,当前得公钥确实是来自于服务器,而不是黑客伪造的~~
想想看,生活中其他的场景是怎么样验证的??例如,你去网吧上网或者去住小旅馆,需要进行身份登记,如何验证你的身份?显然是身份证呀,网管就会拿着你的身份证刷一下,这一刷其实就是再访问公安局的相关服务器,验证你的信息,因此,就需要引入一个第三方公信机构,来证明这个公钥是一个合法的公钥~~因为我们是信任这个机构的,就像我们信任JC叔叔一样,公信机构说这个公钥ok,我们就认为这个公钥可信。