详解 HTTPS 的安全机制

目录

什么是HTTPS

对称加密

非对称加密

中间人攻击

引入证书


什么是HTTPS

在传统的HTTP协议中,数据在网络中是明文传输的,这样就容易导致传输的数据被运营商劫持或者被黑客所篡改。

HTTPS (全称: Hyper Text Transfer Protocol over Secure Socket Layer), 就是 HTTP + 安全层(SSL), 是以安全为目标的 HTTP 通道, 简单讲就是 HTT P的安全版本, 即 HTTP 下加入 SSL 层, HTTPS 的安全基础是 SSL.

HTTPS 和 HTTP 一样, 都是应用层协议, HTTPS 相比于 HTTP 多了一个加密的功能, 就是在 HTTP 基础上引入了SSL/TLS 加密机制, 有效防止了数据被篡改, HTTP 是明文传输, HTTPS 是密文传输, HTTPS 可以使数据的传输更加安全.

如何理解这里的安全?

我们要知道安全这个概念只是相对而言, 要知道 “道高一尺, 魔高一丈”, 不管安全措施如何完善, 相信总是有更厉害的大佬有针对攻击办法, 但我们认为, 网络传输中, 只要黑客解密的成本超过了数据本身的价值, 就认为是安全的了.  毕竟没人会花两百块钱的成本去解密一份价值一百块钱的数据。

对称加密

先引入几个概念:

明文:原始的数据

密文:加密过的数据

密钥:可以将明文转换为密文,或密文转换为明文 的  “ 钥匙 ”

通过对称加密的密钥 取个名字叫为 key

通过非对称加密的密钥 取个名字叫为 pub ,pri (有两个密钥,public和private的缩写)

对称加密 就是客户端和服务器使用相同的密钥对密文进行加密与解密, 密钥就可以认为是一串数字/字符串, 加密就是把明文 (HTTPS 中就是针对 HTTP 的各种 header 和 body) 和密钥字符串进行一系列的数学变换.

具体关系如下:

明文 + key = 密文

密文 + key = 明文

对称加密 流程:

客户端生成一个密钥(key) ,然后将 key 发送给服务器,服务器收到 key 后,后面就都可以通过key进行加密通话了

客户端把明文用 key 加密成密文发送给服务器

服务器收到密文后,再通过 key 将密文解密成明文进行读取

因为 key 是由客户端生成的,因此不同的客户端生成的 key 也是不同的,这样即使黑客破解了这台主机的 key ,另外一台主机的 key 依旧是安全的

而在最开始,key 是要通过网络传输发送给服务器的,显然不可能是明文传输 key ,不然后面的加密操作毫无意义,那要如何加密 key 呢?

难道是用 key2.0 加密 key1.0 ?  

如果是这样,那么 key2.0 又要用 key3.0 来加密,无限套娃了都,因此,显然是行不通的

我们可以使用 非对称加密 来对 key  进行加密。

非对称加密

对于非对称加密,它会同时生成两把密钥,然后将一个密钥发送出去这个我们称为 公钥 (pub) ,另一个密钥则是会留在自己身上,我们称之为  私钥  (pri)

具体的关系与对称加密是有区别的:

明文  +  pub  =  密文

密文  +  pri    =  明文

上面这个关系理解了,才能看懂下面的内容

下面的流程是 面试高频问题 !!!

回到我们的目标,客户端希望自己 的 key 可以安全的传递给服务器 ,不被黑客窃取

因此 我们使用 非对称加密 对 key 进行加密然后再传输

假设 现在有个黑客设备 正在爬取 客户端与服务器之间传输的数据,如图

首先,客户端向服务器请求一个公钥 (pub),黑客如实转发。服务器收到请求后,生成了两个密钥,一个自己保存(pri),一个发送给客户端(pub)。黑客收到 pub 后,继续转发给客户端

然后,客户端就可以生成一个用于对称加密的key了,然后再用 pub 将key 加密成密文发送给服务器。pub 加密的密文 是要用 pri 解密的,此时黑客手里只有 pub 没有 pri ,没办法解密,无奈继续转发给服务器。服务器收到密文后,通过 pri 解密成明文,这样就获取到了 key ,然后向客户端发送 OK  表示自己成功获取到了key,现在可以来进行 对称加密 通话了。

最后,客户端就可以将明文用 key 加密成密文发送给服务器,服务器再通过 key 将密文解密成明文读取数据。此时的黑客由于没有劫取到 key ,因此看不懂密文,这样数据传输就安全了

采取非对称加密,速度慢,成本高,因此只在最开始为了加密 key 只执行一次

后续的业务流程 都是采取对称加密的方式

中间人攻击

针对上面的非对称加密策略,黑客会拦截服务器的响应,并伪装成服务器来骗取客户端发送key

对于服务器则伪装成客户端

这种行为就叫做 中间人攻击

如图,黑客在拦截到服务器发送的公钥(pub)后,自己也会生成一对公钥和私钥(pub2 pri2),然后将 pub2 发送给客户端,客户端收到黑客的 pub2 后,就会误认为这是服务器的 pub ,然后就会用 pub2 对 key 进行加密然后发送给服务器。

此时,黑客就会再次拦截 key密文 然后用 pri2 对其解密得到 key ,再用 pub 对 key 加密,然后发送给服务器。服务器收到后再返回ok消息。

现在 客户端跟服务器都以为 key 没有泄露,开始进行加密传输,而黑客此时已经掌握了 key

对通信双方加密的数据 一览无余。

引入证书

为了破解中间人攻击,所以HTTPS引入了证书机制

如下可以查看当前网页的证书

现在的服务器(网站)搭建后,都需要向CA结构申请一个证书(类似于去公安局办个身份证)

如果不想申请证书,只想搭个纯HTTP,很遗憾,现在的浏览器对HTTP服务会发出安全警告

证书包含的内容有:

  • 证书发布机构
  • 证书有效期
  • 公钥
  • 证书所有者
  • 加密后的签名
  • 。。。。。等等

可以看到证书里已经包含了服务器的公钥了,因此客户端以后就不会再询问公钥,而是向服务器所要证书。

签名

这是证书的校验机制。签名就是一个校验和,CA机构会将证书上的所有的属性进行计算,得出校验和,再由CA机构使用自己的私钥对这个校验和 (签名)进行加密,就形成了加密后的签名。

接下来看看传输流程:

首先要知道现在很多操作系统自身就携带了 CA机构的公钥 pub2

服务器搭建好后 生成了 公钥 和 私钥 (pub1 pri1),然后将服务器各种属性发送给 CA结构申请证书,CA机构验证通过后颁布证书给服务器(此时证书里就包含了服务器的公钥 pub1),同时证书里也包含了 用 pri2 加密过的签名。

然后,浏览器访问服务器时,就不会再索要 pub1了,而是索要服务器证书,服务器就将证书发送给客户端,客户端拿到证书后,就可以用操作系统出场自带的公钥 pub2 对签名进行解密,得到证书全部属性的校验和,再通过相同的算法 计算出当前证书的全部属性的校验和。

如果两个校验和 相同,则说明证书没有被篡改过,则说明证书是正确的。

然后,客户端再生成key,然后用证书里的 pub1 进行加密发送给服务器,服务器通过 pri1解密后就可以拿到key了,再然后 客户端 服务器 就可以通过key进行对称加密传输了

整个流程涉及到了五把密钥,分别是 key pub1 pri1 pub2 pri2  请反复研究流程确保掌握其作用

证书的全部内容 黑客都是看得到的,证书的作用 是 让黑客改不了

此时, 黑客即使把证书中服务器的公钥篡改替换成自己的公钥, 然后黑客再针对证书中的各个属性, 重新计算签名, 下一步, 黑客就需要把签名重新加密, 这里黑客就无能为力了, 因为想要加密, 黑客就必须知道工信机构的私钥 (pri2), 显然, 黑客是无法知道的, 证书的关键, 不是让黑客 “看不到”, 而是让黑客 “改不了”.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值