博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
为什么要使用HTTPS?
阅读量:6604 次
发布时间:2019-06-24

本文共 1384 字,大约阅读时间需要 4 分钟。

一句到尾,HTTPS的存在就是为了传输一次安全的对称秘钥。通信双方使用这个安全的对称秘钥加密实际数据。

HTTPS解决的是HTTP的什么缺陷?

HTTP的传输内容是明文,容易被窃听,不安全。

在现有的网络结构中,传输消息,需要经过很多中转节点,这是IP协议负责的事情,也就是说需要经过链路上的各个路由器,路由器一步一步转发,最终到达目标终点。这个过程中,很明显只要别有用心的人,把其中的内容窃听或者篡改,那后果就很可怕了。

解决思路:

1.如果是明文传输,那是不是先给数据加密,然后再进行传输不就OK了?

加密可以分为,对称加密,非对称加密(性能消耗大)。

如果数据使用对称加密,那么就需要双方提前商定好,对称秘钥。服务器端通过此对称秘钥加密数据,客户端使用对称秘钥解密数据。

但是客户端并不是固定的,所以要么只使用一种对称秘钥,所有客户端都一样。要么就先传输对称秘钥,然后再进行数据传输。

第一种办法肯定就GG了,安全性很低,只有一种对称秘钥,伪造的客户端,是有可能不断通过重试,得到公钥。

那么只有第二种办法,需要安全传输一次对称秘钥。这里还有一个问题,对称秘钥分为私钥与公钥。简单来说,就是公钥是服务器下发的,用此公钥加密的内容,只有私钥可以解密。所以问题就来了,公钥如果被劫持了,怎么破?中间人会发一个假公钥到客户端,客户端用这个假公钥加密的数据,可以别中间人的私钥解密,篡改数据后,然后再使用真公钥加密假数据,与服务端通信。那也就是说,客户端需要有办法验证拿到的是不是来自服务器的公钥。

这就是HTTPS做的事情。也就是传说中的数字证书数字证书 = 数字签名 + 信息

数字签名,首先简单说一下所谓的数字签名。这跟我们平常生活中的签名是一样的,具有不可伪造和不可抵赖,两个特性。我们平时的手写签名,是具有法律效应的,因为每一个人的笔迹都是独一无二的,即使模仿,也可以通过专家鉴定分别出来。而不可抵赖,是因为每个人的笔迹都有固定特征,这些特征是很难摆脱的。

那数字签名是怎么做到的呢?

它用公钥加密然后私钥解密,同时可以用私钥加密然后公钥解密

这样,如果你生成了一对RSA密钥,你把公钥公布出去,并告诉全世界人这个公钥是你的。之后你只要在发送的消息,比如“123456”这个就是上面说的信息,后面加上用私钥加密过的密文,其他人拿公钥解密,看解密得到的内容是不是“123456”就可以知道这个“123456”是不是你发的。 其他人因为没有对应的私钥,所以没法生成公钥可以解密的密文,所以是不可伪造的。 又因为公钥对应的私钥只有一个,所以只要能成功解密,那么发消息的一定是你,不会是其他人,所以是不可抵赖的。

所以当客户端确定收到的是来自服务器的公钥,就可以生成一个随机对称秘钥,用此公钥进行加密。然后将此随机对称秘钥发送给服务端,之后便通过这个随机生成的对称秘钥进行加密数据通信。

看一张流程图:

最后以上做的事情,就是整个HTTPS具体做的事情,也就是TLS/SSL做的事情。

参考:

https://blog.csdn.net/qmickecs/article/details/73696954?utm_source=copy 

https://blog.liuxuan.site/2018/05/21/learn_https_through_photos/

你可能感兴趣的文章
Python正则表达式初识(十)附正则表达式总结
查看>>
APICLOUD 1.1.0 开发环境搭建
查看>>
《Cadence 16.6电路设计与仿真从入门到精通》——导读
查看>>
Confluence 6 如何让我的小组成员知道那些内容是重要的
查看>>
找到一个适合的分布式文件系统之各种分布式文件系统优缺点对比
查看>>
httpd基本配置
查看>>
索引失效的几个原因
查看>>
关于多线程中使用while做循环而不使用if的解释
查看>>
欢迎你,企业基础架构CCIE,RS CCIEv5.0的升级版新时代迎合自动化运维的网工顶级认证...
查看>>
js typoeof用法
查看>>
五险一金,你清楚吗?
查看>>
Ip核_fifo
查看>>
基础 JavaScript 实例
查看>>
自定义pageControl
查看>>
repquota命令--Linux命令应用大词典729个命令解读
查看>>
我的友情链接
查看>>
设置vs解决方案跟随右边cpp
查看>>
Linux Administration
查看>>
如何使版面富有节奏感
查看>>
rabbitmq 管理及常用命令
查看>>