百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

面试突击65:为什么要用HTTPS?它有什么优点?

ztj100 2025-01-17 14:38 12 浏览 0 评论

说到 HTTPS 相信大部分人都是不陌生,因为目前我们使用的绝大数网站都是基于 HTTPS 的,比如以下这些:

那么问题来了,他们为什么要使用 HTTPS 呢?HTTPS 有哪些过人之处呢?

1.HTTP

在说 HTTPS 之前,我们先要了解 HTTP,因为 HTTP 是 HTTPS 通讯的基础。

HTTP(HyperText Transport Protocol)超文本传输协议,它用于传输客户端和服务器端的数据。

HTTP 使用很简单也很方便,但却存在以下 3 个致命问题:

  1. 使用明文通讯,内容可以被窃听。
  2. 不验证通讯方的真实身份,可能会遭到伪装。
  3. 无法证明报文的完整性,很容易被篡改。

鉴于以上问题,所以现在的系统会使用 HTTPS 来替代 HTTP。

2.HTTPS

首先来说,HTTPS 并不是一种新的协议,而是在 HTTP 协议的基础上添加了加密机制 SSL(Secure Socket Layer)或 TLS(Transport Layer Security)。

HTTPS = HTTP + 加密 + 认证 + 完整性保护。

SSL 和 TLS

SSL(Secure Socket Layer)最早是由浏览器开发厂商网景公司开发的,此公司开发了 SSL 3.0 及 3.0 之前的版本,之后便将 SSL 交给了 IETF(Internet Engineering Task Force)Internet 工程任务组的手中,IETF 以 SSL 3.0 为基础开发了 TLS 1.0,所以可以认为 TLS 是 SSL 的“新版本”。

2.1 解决信任问题

作为 HTTPS 来说,首先要解决的就是信任问题,也就是身份效验的问题,如果不解决信任问题就会存在服务器伪装,也就是“中间人攻击”的问题。

所谓的中间人攻击指的是,正常情况下本该是客户端和服务端直接进行交互的,但此处冲出来一个“坏人”(中间人),它包含在客户端和服务器端之间,用于盗取和篡改双方通讯的内容,如下图所示:

HTTPS 解决信任问题采用的是数字证书的解决方案,也就是服务器在创建之初,会先向一个大家都认可的第三方平台申请一个可靠的数字证书,然后在客户端访问(服务器端)时,服务器端会先给客户端一个数字证书,以证明自己是一个可靠的服务器端,而非“中间人”。

此时浏览器会负责效验和核对数字证书的有效性,如果数字证书有问题,那么客户端会立即停止通讯,如果没问题才会执行后续的流程,如下图所示:

有了数字证书之后,就可以验证服务器端的真实身份了,这样就解决了“中间人攻击”的问题,也解决了伪装的问题。

2.2 解决明文传输和完整性问题

虽然上面我们已经解决了信任问题,然而因为通讯双方是明文通讯的,所以在通讯时依然存在通讯内容被窃听的风险,此时应该怎么办呢?

于是我们想到,使用加密来解决信息暴露的问题。

加密的分类

加密主要分为两大类:对称加密和非对称加密。

  • 在对称加密中,有一个共享秘钥,通过这把共享秘钥可以实现信息的加密和信息的解密,它的特点是加密和解密的速度很快,但因为共享秘钥的问题,一旦共享秘钥被截获,那么所谓的加密和解码也就是一纸空谈了。
  • 在非对称加密中,有一对秘钥:公钥和私钥,使用公钥可以加密信息,但不能解密信息,使用私钥可以解密信息。它的特点是服务器端保存私钥,不对外暴露,只将公钥发送给客户端,而其他人即使拿到公钥,也解密不了加密的信息,所以此方式更安全,但非对称加密的执行速度比较慢。

那在 HTTPS 中要使用对称加密还是非对称加密呢?

使用对称加密,速度快,但不安全;使用非对称加密安全,但速度慢。

只有小孩做选择,成年人都要,所以 HTTPS 中既使用了非对称加密也使用了对称加密,它的整个交互流程是这样的:

HTTPS 执行流程如下:

  1. 客户端使用 HTTPS 访问服务器端。
  2. 服务器端返回数字证书,以及使用非对称加密,生成一个公钥给客户端(私钥服务器端自己保留)。
  3. 客户端验证数字证书是否有效,如果无效,终止访问,如果有效:
    1. 使用对称加密生成一个共享秘钥;
    2. 使用对称加密的共享密钥加密数据;
    3. 使用非对称加密的公钥加密(对称加密生成的)共享秘钥。
    4. 发送加密后的密钥和数据给服务器端。
  1. 服务器端使用私钥解密出客户端(使用对称加密生成的)共享秘钥,再使用共享秘钥解密出数据的具体内容。
  2. 之后客户端和服务器端就使用共享密钥加密的内容内容进行交互了。

这样,HTTPS 既保证了安全性,同时又保证了高效性,可谓鱼和熊掌兼得。

使用加密的方式也间接地保证了数据的完整性问题,如果是不完整的数据或有多余的数据,那么在解密时会报错,这样就能间接的保证数据的完整性了。

总结

使用 HTTP 协议存在明文通讯和中间人攻击等问题,但这些问题在 HTTPS 中得到了有效的解决,HTTPS 通过数字证书解决了中间人攻击的问题,使用加密手段解决了明文通讯和数据完整性的问题。


参考 & 鸣谢

《图解HTTP》

《图解TCP/IP网络知识轻松入门》

相关推荐

Vue 技术栈(全家桶)(vue technology)

Vue技术栈(全家桶)尚硅谷前端研究院第1章:Vue核心Vue简介官网英文官网:https://vuejs.org/中文官网:https://cn.vuejs.org/...

vue 基础- nextTick 的使用场景(vue的nexttick这个方法有什么用)

前言《vue基础》系列是再次回炉vue记的笔记,除了官网那部分知识点外,还会加入自己的一些理解。(里面会有部分和官网相同的文案,有经验的同学择感兴趣的阅读)在开发时,是不是遇到过这样的场景,响应...

vue3 组件初始化流程(vue组件初始化顺序)

学习完成响应式系统后,咋们来看看vue3组件的初始化流程既然是看vue组件的初始化流程,咋们先来创建基本的代码,跑跑流程(在app.vue中写入以下内容,来跑流程)...

vue3优雅的设置element-plus的table自动滚动到底部

场景我是需要在table最后添加一行数据,然后把滚动条滚动到最后。查网上的解决方案都是读取html结构,暴力的去获取,虽能解决问题,但是不喜欢这种打补丁的解决方案,我想着官方应该有相关的定义,于是就去...

Vue3为什么推荐使用ref而不是reactive

为什么推荐使用ref而不是reactivereactive本身具有很大局限性导致使用过程需要额外注意,如果忽视这些问题将对开发造成不小的麻烦;ref更像是vue2时代optionapi的data的替...

9、echarts 在 vue 中怎么引用?(必会)

首先我们初始化一个vue项目,执行vueinitwebpackechart,接着我们进入初始化的项目下。安装echarts,npminstallecharts-S//或...

无所不能,将 Vue 渲染到嵌入式液晶屏

该文章转载自公众号@前端时刻,https://mp.weixin.qq.com/s/WDHW36zhfNFVFVv4jO2vrA前言...

vue-element-admin 增删改查(五)(vue-element-admin怎么用)

此篇幅比较长,涉及到的小知识点也比较多,一定要耐心看完,记住学东西没有耐心可不行!!!一、添加和修改注:添加和编辑用到了同一个组件,也就是此篇文章你能学会如何封装组件及引用组件;第二能学会async和...

最全的 Vue 面试题+详解答案(vue面试题知识点大全)

前言本文整理了...

基于 vue3.0 桌面端朋友圈/登录验证+60s倒计时

今天给大家分享的是Vue3聊天实例中的朋友圈的实现及登录验证和倒计时操作。先上效果图这个是最新开发的vue3.x网页端聊天项目中的朋友圈模块。用到了ElementPlus...

不来看看这些 VUE 的生命周期钩子函数?| 原力计划

作者|huangfuyk责编|王晓曼出品|CSDN博客VUE的生命周期钩子函数:就是指在一个组件从创建到销毁的过程自动执行的函数,包含组件的变化。可以分为:创建、挂载、更新、销毁四个模块...

Vue3.5正式上线,父传子props用法更丝滑简洁

前言Vue3.5在2024-09-03正式上线,目前在Vue官网显最新版本已经是Vue3.5,其中主要包含了几个小改动,我留意到日常最常用的改动就是props了,肯定是用Vue3的人必用的,所以针对性...

Vue 3 生命周期完整指南(vue生命周期及使用)

Vue2和Vue3中的生命周期钩子的工作方式非常相似,我们仍然可以访问相同的钩子,也希望将它们能用于相同的场景。...

救命!这 10 个 Vue3 技巧藏太深了!性能翻倍 + 摸鱼神器全揭秘

前端打工人集合!是不是经常遇到这些崩溃瞬间:Vue3项目越写越卡,组件通信像走迷宫,复杂逻辑写得脑壳疼?别慌!作为在一线摸爬滚打多年的老前端,今天直接甩出10个超实用的Vue3实战技巧,手把...

怎么在 vue 中使用 form 清除校验状态?

在Vue中使用表单验证时,经常需要清除表单的校验状态。下面我将介绍一些方法来清除表单的校验状态。1.使用this.$refs...

取消回复欢迎 发表评论: