HTTPS 如何保证数据传输嘅安全性

大家都知道,喺客户端与服务器数据传输嘅过程中,HTTP协议嘅传输係唔安全嘅,也就係一般情况下HTTP係明文传输嘅。但HTTPS协议嘅数据传输係安全嘅,也就係说HTTPS数据嘅传输係经过加密嘅。

喺客户端与服务器这两个完全没有见过面嘅陌生人交流中,HTTPS係如何保证数据传输嘅安全性嘅呢?下面我将带大家一步步了解HTTPS係如何加密才得以保证数据传输嘅安全性嘅。

我们先把客户端称为小客,服务器称为小服。然后一步步探索喺小客与小服嘅交流中(就係一方请求一方响应),HTTPS係如何保证他们嘅交流唔会被中间人窃听嘅。

1.对称加密

假如现喺小客与小服要进行一次私密嘅对话,他们唔希望这次对话内容被其他外人知道。可係,我们平时嘅数据传输过程中又係明文传输嘅,万一被某个黑客把他们嘅对话内容给窃取了,那就难受了。

为了解决这个问题,小服这家伙想到了一个方法来加密数据,让黑客看唔到具体嘅内容。该方法係这样子嘅:

喺每次数据传输之前,小服会先传输给小客一把密钥,然后小服喺之后给小客发消息嘅过程中,会用这把密钥对这些消息进行加密。小客喺收到这些消息后,会用之前小服给嘅那把密钥对这些消息进行解密,这样,小客就能得到密文里面真正嘅数据了。如果小客要给小服发消息,也同样用这把密钥来对消息进行加密,小服收到后也用这把密钥进行解密。

这样,就保证了数据传输嘅安全性。如图所示:

这种方法称之为对称加密,加密和解密都用同一把密钥。

这时,小服想着自己嘅策咯,还係挺得意嘅。但这个策略安全嘅前提係,小客拥有小服嘅那把密钥。可问题係,小服係以明文嘅方式把这把密钥传输给小客嘅,如果黑客截取了这把密钥,小服与小客就算係加密了内容,喺截取了密钥嘅黑客老哥眼里,这和明文没啥区别。

2.非对称加密

小服还係挺聪明嘅,意识到了密钥会被截取这个问题,他又想到了另外一种方法:用非对称加密嘅方法来加密数据。方法如下:

小服和小客都拥有两把钥匙,一把钥匙係公开嘅(全世界都知道也没关系),称之为公钥;而另一把钥匙係保密(也就係只有自己才知道),称之为私钥。并且,用公钥加密嘅数据,只有对应嘅私钥才能解密;用私钥加密嘅数据,只有对应嘅公钥才能解密。

所以喺传输数据嘅过程中,小服喺给小客传输数据嘅过程中,会用小客给他嘅公钥进行加密,然后小客收到后,再用自己嘅私钥进行解密。小客给小服发消息嘅时候,也一样会用小服给他嘅公钥进行加密,然后小服再用自己嘅私钥进行解密。

这样,数据就能安全到达双方。如图:

想着这么复杂嘅策略都能想出来,小服可係得意嘅唔能再得意了…..还没等小服得意多久,小客就给它泼了一波冷水。

小客严肃着说:其实,你嘅这种方法也唔係那么安全啊,还係存喺被黑客截取嘅危险啊。例如:

你喺给我传输公钥嘅过程中,如果黑客截取了你嘅公钥,并且拿着自己嘅公钥来冒充你嘅公钥来发给我。我收到公钥之后,会用公钥进行加密传输(这时用嘅公钥实际上係黑客嘅公钥)。黑客截取了加密嘅消息之后,可以用他自己嘅私钥来进行解密来获取消息内容。然后再用你(小服)嘅公钥来对消息进行加密,之后再发给你(小服)。 这样子,我们嘅对话内容还係被黑客给截取了(倒过来小客给小服传输公钥嘅时候也一样)。

……这么精妙嘅想法居然也唔行,小服这波,满脸无神。

这里插讲下,其实喺传输数据嘅过程中,喺速度上用对称加密嘅方法会比非对称加密嘅方法快很多。所以喺传输数据嘅时候,一般唔单单只用非对称加密这种方法(我们先假设非对称密码这种方法很安全),而係会用非对称加密 + 对称加密这两种结合嘅方法。基于这个,我们可以用非对称加密方法来安全着传输密钥,之后再用对称加密嘅方法来传输消息内容(当然,我这里假定了非对称加密传输係安全嘅,下面会讲如何使之安全)。

3.数字证书

我们回头想一下,係什么原因导致非对称加密这种方法嘅唔安全性呢?它和对称加密方法嘅唔安全性唔同。非对称加密之所以唔安全,係因为小客收到了公钥之后,无法确定这把公钥係否真嘅属于小服。

也就係说,我们需要找到一种策略来证明这把公钥就係小服嘅,而唔係别人冒充嘅。

为了解决这个问题,小服和小客绞尽脑汁想出了一种终极策略:数字证书——我们需要找到一个拥有公信力、大家都认可嘅认证中心(CA)。小服喺给小客发公钥嘅过程中,会把公钥以及小服嘅个人信息通过Hash算法生成消息摘要。如图:

为了防止摘要被人调换,小服还会用CA提供嘅私钥对消息摘要进行加密来形成数字签名。如图:

并且,最后还会把原来没Hash算法之前嘅信息和数字签名合并喺一起,形成数字证书。如图:

当小客拿到这份数字证书之后,就会用CA提供嘅公钥来对数字证书里面嘅数字签名进行解密得到消息摘要,然后对数字证书里面小服嘅公钥和个人信息进行Hash得到另一份消息摘要,然后把两份消息摘要进行对比,如果一样,则证明这些东西确实係小服嘅,否则就唔係。如图:

这时可能有人会有疑问,CA嘅公钥係怎么拿给小客嘅呢?小服又怎么有CA嘅私钥呢?

其实,(有些)服务器喺一开始就向认证中心申请了这些证书,而客户端里,也会内置这些证书。如图(此图来元阮一峰嘅网络日志):

当客户端收到服务器返回来嘅数据时,就会喺内置嘅证书列表里,查看係否有有解开该数字证书嘅公钥。

發表於 分類 科技