一文看懂https如何保证数据传输的安全性的

此文大概3000字,看完大概需要8分钟。

大家都知道,在客户端与服务器数据传输的过程中,http协议的传输是不安全的,也就是一般情况下http是明文传输的。但https协议的数据传输是安全的,也就是说https数据的传输是经过加密。

在客户端与服务器这两个完全没有见过面的陌生人交流中,https是如何保证数据传输的安全性的呢?

下面我将带大家一步步了解https是如何加密才得以保证数据传输的安全性的。

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

1. 对称加密

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

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

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

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

这时,小服想着自己的策咯,还是挺得意的。

可是,这时候问题来了。这个策略安全的前提是,小客拥有小服的那把密钥。可问题是,小服是以明文的方式把这把密钥传输给小客的,这个时候,如果黑客截取了这把密钥,那就难受了。小服与小客就算是加密了内容,在截取了密钥的黑客老哥眼里,这和明文没啥区别。

2. 非对称加密

小服还是挺聪明的,得意了一会之后,小服意识到了密钥会被截取这个问题。倔强的小服又想到了另外一种方法:用非对称加密的方法来加密数据。该方法是这样的:

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

所以在传输数据的过程中,小服在给小客传输数据的过程中,会用小客给他的公钥进行加密,然后小客收到后,再用自己的私钥进行解密。小客给小服发消息的时候,也一样会用小服给他的公钥进行加密,然后小服再用自己的私钥进行解密。 这样,数据就能安全着到达双方。如图:

想着这么复杂的策略都能想出来,小服可是得意的不能在得意了…..

看着那么得意的小服,小客这时心情就不得好了。还没等小服得意多久,小客就给它泼了一波冷水了。

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

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

我靠,这么精妙的想法居然也不行,小服这波,满脸无神。

插讲下

其实在传输数据的过程中,在速度上用对称加密的方法会比非对称加密的方法快很多。所以在传输数据的时候,一般不单单只用非对称加密这种方法(我们先假设非对称密码这种方法很安全),而是会用非对称加密 + 对称加密这两种结合的方法。 你想啊,对于对称加密这种方法来说,之所以不安全是因为密钥在传输的过程中,被别人知道了。基于这个,我们可以用非对称加密方法来安全着传输密钥,之后在用对称加密的方法来传输消息内容(当然,我这里假定了非对称加密传输是安全的,下面会讲如何使之安全)。

数字证书

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

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

为了解决这个问题,小服和小客通过绞尽脑汁想出了一种终极策略:数字证书

我们需要找到一个拥有公信力、大家都认可的认证中心(CA)。

小服再给小客发公钥的过程中,会把公钥以及小服的个人信息通过Hash算法生成消息摘要。如图:

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

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

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

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

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

当客户端收到服务器返回来的数据时,就会在内置的证书列表里,查看是否有有解开该数字证书的公钥,如果有则…..否则…..

讲到这里,就大概结束了。希望对你有所帮助勒。如果有哪里写得不对的地方,欢迎大家指出,可以在公众号给我发信息,谢谢。 另外,如果觉得写的不错,就点个赞勒,哈哈。

原文发布于微信公众号 - 苦逼的码农(di201805)

原文发表时间:2018-07-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏安智客

密码技术之数字签名

我们知道,散列函数解决了消息的完整性防止篡改,消息认证码解决的是消息发送者是否被伪装的问题,但是消息的防抵赖性如何保证呢?因为发送接收双方都共享一个密钥,因为对...

1402
来自专栏IMWeb前端团队

HTTPS科普扫盲帖

本文作者:IMWeb 陈映平 原文出处:IMWeb社区 未经同意,禁止转载 为什么需要https HTTP是明文传输的,也就意味着,介于发送端、接收端...

8778
来自专栏北京马哥教育

加密传输原理

数字签名,就是通过在数据单元上附加数据,或对数据单元进行秘密变换,从而使接收者可以确认数据来源和完整性。简单说来,数字签名是防止他人对传输的文件进行破坏,以及确...

34010
来自专栏北京马哥教育

Openssl加密解密原理+CA自建实现

前言 互联网的惊人发展使企业和消费者都感到非常兴奋,它正改变着我们的生活和工作方式。但是,互联网的安全程度如何——尤其是在通过它发送机密信息时的安全性——已...

3446
来自专栏贾老师の博客

数字证书与安全

2673
来自专栏FreeBuf

破解之美:利用ECB加密缺陷突破cookie加密

密码学诞生于古人类社会,例如古希腊斯巴达的密码棒、欧洲中世纪时期的密码栏、阿伯提发明的密码盘等。古代的密码学是一门加密隐蔽的学科,而现代密码学定义为加密与解密,...

2858
来自专栏Java学习网

也许,这样理解HTTPS更容易

 摘要:本文尝试一步步还原HTTPS的设计过程,以理解为什么HTTPS最终会是这副模样。但是这并不代表HTTPS的真实设计过程。在阅读本文时,你可以尝试放下已有...

3605
来自专栏醒者呆

应用密码学初探

关键字:密码学,密码算法,单向哈希函数,对称加密,非对称加密,数字签名,数字证书,Merkle树,同态加密 在计算机科学中,密码学常常用来解决某些特定的难...

4668
来自专栏Vamei实验室

协议森林17 我和你的悄悄话 (SSL/TLS协议)

TLS名为传输层安全协议(Transport Layer Protocol),这个协议是一套加密的通信协议。它的前身是SSL协议(安全套接层协议,Secure ...

2017
来自专栏阮一峰的网络日志

数字签名是什么?

今天,我读到一篇好文章。 它用图片通俗易懂地解释了,"数字签名"(digital signature)和"数字证书"(digital certificate)到...

3115

扫码关注云+社区

领取腾讯云代金券