HTTPS(面试高频必须掌握)

news2025/1/16 0:58:34

目录

一、HTTPS背景

二、HTTPS 的工作过程

1. 对称加密

2.非对称加密

3. HTTPS 基本工作过程

3.1 使用对称密钥

3.2 引入非对称密钥(面试高频问题)

3.3 黑客的手段

3.4 引入证书

3.5 捋一捋

3.6 SSL/TLS

三、HTTP 与 HTTPS 区别(高频面试题)

四、Tomcat

1.目录介绍

2.服务器的启动

3.部署静态页面

3.1 部署博客系统页面


🌈上节课我们学习完 HTTP 协议,相信大家已经了解,这节课我们学习 HTTPS,HTTPS 基于 HTTP,只是比 HTTP 多了一个 “加密层”

一、HTTPS背景

HTTPS 也是一个应用层协议. 是在 HTTP 协议的基础上引入了一个加密层.

        “运行商劫持”:例如我们在下载一个软件的时候,就会弹出下载的链接;但是这时候就会出现运营商劫持,点击下载按钮,就回弹出其他软件的下载链接。

        由于我们通过网络传输的任何的数据包都会经过运营商的网络设备(路由器, 交换机等), 那么运营商的网络设备就可以解析出你传输的数据内容, 并进行篡改。点击 "下载按钮", 其实就是在给服务器发送了一个 HTTP 请求, 获取到的 HTTP 响应其实就包含了该 APP的下载链接. 运营商劫持之后, 就发现这个请求是要下载某一个软件, 那么就自动的把交给用户的响应给篡改成 "其他软件" 的下载地址了

为什么有运营商劫持❓❓ 被金钱蒙蔽双眼


只要网络上的数据,明文传输的,都是存在被劫持,被篡改的风险!!(网络其实是一个原始森林,处处充满危机)

为了能够改善上述问题,就引入了加密,HTTPS 就应运而生

  • 加密就是把 明文 (要传输的信息)进行一系列变换, 生成 密文;
  • 解密就是把 密文 再进行一系列变换, 还原成 明文;
  • 在这个加密和解密的过程中, 往往需要一个或者多个中间的数据, 辅助进行这个过程, 这样的数据称为 密钥

二、HTTPS 的工作过程

对于密码学,并没有太多的了解,不讨论加密解密的细节算法,只考虑宏观的流程

1. 对称加密

只有一个密钥(key),通过密钥把明文加密成密文,并且也能把密文解密成明文

明文 + key ===> 密文                密文 + key ===> 明文

这里我们发现 加密和解密 使用的是同一个密钥;对称加密的特点是计算起来比较快速

2.非对称加密

需要两个密钥:一个叫做 公钥(pub),私钥(pri),这里 pub 和 pri是一对,拿 pub 加密,只能拿对应 pub 的 pri 解密

      明文 + pub ====> 密文                密文 + pri ====> 明文

or   明文 + pri ====> 密文                 密文 + pub ====> 明文

3. HTTPS 基本工作过程

加密:针对 HTTP 的各种 header 和 body

3.1 使用对称密钥

 一个正常的客户端服务器:

 此时如果有黑客入侵:

 既然是不同的客户端有不同的密钥,此处就要求客户端在连接到服务器的时候,自己先生成一个密钥,让每个客户端各自生成各自的密钥,互不相关,也就生成了不同的密钥了

既然客户端需要自己生成一个密钥,如何把这个密钥告诉服务器呢❓❓ 网络传输

  • 客户端生成自己的密钥之后,就把key通过网络发送给服务器,但是这个数据也可能被黑客截获,此时黑客就知道密钥了

看起来是需要针对key也进行加密,难道要生成一个 key2,使用 key2 加密 key❓❓key2 也得告诉服务器谁来加密 key2❓❓走到这里此路就走不通,需要考虑其他方法——非对称密钥

3.2 引入非对称密钥(面试高频问题)

 逻辑过程(至关重要,面试高频

  1.  服务器生成一对公钥(pub)和私钥(pri),在这里公钥要别人,私钥留着自己用
  2. 客户端生成一个对称密钥key:客户端希望把自己的 key 安全传输给服务器,不被黑客拿到
  3. 客户端给服务器发送请求:大哥你的公钥是啥
  4. 服务器收到请求之后,返回公钥(pub)给客户端(很明显,这个时候 黑客和客户端都拿到了 pub)
  5. 客户端使用 pub 针对 key 进行加密
  6. 客户端就把key 被 pub 加密的密文发送给服务器(当然,黑客也拿到了这个密文,但是由于这个数据是使用 pub 加密的,要想解密,只能使用和 pub 成对的这个 pri 才行,而黑客是没有 pri  私钥的,黑客无法解密,拿不到 key;服务器有pri,能解密)
  7. 服务器返回 o k给客户端
  8. 后续的业务数据,客户端都是使用 key 进行加密
  9. 此时密文到达黑客这边,由于黑客没有拿到对称密钥key,此时就不可能解析和篡改,就发送到了客户端
  10. 重复密文传输即可

3.3 黑客的手段

安全是“相对的”,可以通过“骗”的方式,来放倒客户端的

  1. 服务器生成一对公钥(pub)和私钥(pri),在这里公钥要别人,私钥留着自己用
  2. 客户端生成一个对称密钥key:客户端希望把自己的 key 安全传输给服务器,不被黑客拿到
  3. 客户端给服务器发送请求:大哥你的公钥是啥
  4. 服务器收到请求之后,返回公钥(pub)给客户端(此时黑客自己生成一对非对称密钥 pri2 和 pub2,把 pub2发送给客户端,并且记住pub
  5. 此时客户端拿到的就是 pub2,然后客户端使用 pub2 针对 key 进行加密
  6. 客户端就把key 被 pub2 加密的密文发送给黑客(黑客手里有 pub2 对应的 pri2,就可以进行解密,于是拿到了 key;此时黑客继续使用服务器的 pub 对 key 重新加密,把密文发送给服务器)
  7. 服务器拿到这份加密的数据之后,使用 pri 解密,解密成功,拿到对应密钥 key;此时服务器以为客户端的对称密钥是 key,此时返回ok
  8. 后续的业务数据,客户端都是使用 key 进行加密
  9. 此时密文到达黑客这边,就可以进行数据的解析,这样数据就透明 了

要想解决中间人攻击,破解的关键在于让客户端信任公钥,这个知识点就引入证书

3.4 引入证书

这个“证书”不是一个“纸质”的证书,而是一串数据,也是数字证书

引入一个权威机构,负责去颁发证书;比如说我现在有一个服务器,就可以去这个机构申请证书,再申请的时候提交一些资料(并且服务器的公钥也可以一起提交过去,此时证书中就包含了服务器的公钥),审核通过之后就会颁发证书

 黑客可以知道公钥,也可以对签名进行解密,黑客也可以对证书进行同样的校验;校验是人人都可以校验,关键是能改❗❗ 

  1. 客户端给服务器发送请求:大哥你的证书是啥
  2. 服务器收到请求之后,返回证书给客户端
  3. 客户端拿到证书之后,首先需要进行校验:1️⃣得到初始签名:客户端使用系统中内置的权威机构的公钥 pub2,针对上述证书中的加密签名进行解密,得到初始签名(这个签名是权威机构计算出来的,设为 sum1)2️⃣计算现在的签名:客户端使用同样的签名计算算法,基于证书的属性重新计算,得到 sum23️⃣比较两个签名是否相同:如果相同,说明整数的数据都是未被篡改的原始数据;如果签名不同,说明证书的数据被篡改过,客户端的浏览器弹框报错

为什么说黑客不能篡改❓❓❓ 安全的关键不是黑客“看不到”,而是黑客“篡改不了”


1️⃣黑客把证书的服务器的公钥(pub),替换成自己的公钥2️⃣黑客针对证书的各个属性,重新计算签名3️⃣黑客需要把签名 重新加密,要想加密,务必需要知道权威机构的私钥,然而这个事情,黑可是不知道的

3.5 捋一捋

  • 客户端生成的对称密钥:用来加密业务数据
  • 服务器生成的非对称密钥 pub 和 pri :用来加密对称密钥
  • 颁布证书机构的非对称密钥(私钥机构自己持有,公钥客户端电脑系统内置):用来加密证书的签名
  1. 通过对称密钥:来保证业务数据的安全
  2. 使用非对称密钥:来安全传输对称密钥
  3. 通过中间人攻击:黑客能拿到对称密钥
  4. 引入证书:使客户端能够验证该公钥是否合格 (客户端如何让检验证书,是关键环节)

上述过程,尽量用 画图 来讲解

3.6 SSL/TLS

上述介绍的这一套:对称加密 + 非对称加密 + 证书(这一套也叫 SSL/TLS) 这一套流程,不仅仅是 HTTPS会涉及到,其他场景也会用到 SSL(SSL协议),所以说 HTTPS  = HTTP + SSL

三、HTTP 与 HTTPS 区别(高频面试题)

  1. HTTP协议是超文本传输协议,数据是明文传输,具有安全风险,HTTPS是具有安全性的SSL加密传输协议,对数据进行加密传输
  2. HTTPS协议需要向权威机构申请数字证书,保证服务器的身份是可信的
  3. HTTP的连接相对简单,只需要经过TCP的三次握手就可以进行数据传输,而HTTPS的连接需要经过TCP的三次握手后,再经过SSL的握手才能进行加密数据传输
  4. 两者的默认端口不一样,HTTP的默认端口是80,HTTPS的默认端口是443

四、Tomcat

HTTP 是前后交互的桥梁;HTTP 服务器 本质上 就是一个 TCP 服务器(HTTP是基于 TCP),这个服务器是按照 HTTP 协议约定,解析请求,构造响应;业界由很多现场的 HTTP 服务器,直接可以使用

🌈在 JAVA 圈子里,最知名的 HTTP 服务器,就是 Tomcat (是 apache 社区开源的 HTTP 服务器,现在 java 生态中,最流行的 http 服务器)

apache 最开始是一个开源项目,apache 也是一个 HTTP 服务器(httpd),后来围绕这个项目就形成了一个社区,越来越多的大佬来贡献代码,于是就成立了 apache 开源组织,有很多开源项目,Tomcat 也是其中的代表作

1️⃣从 tomcat 官网上下载安装:Apache Tomcat® - Apache Tomcat 8 Software Downloads

 下载 Tomcat 8;新的不一定好,新的不稳定,可能由一些 bug,像如 jdk 还在用 8,因为仍然由大部分公司还在用,少数在用 11,虽然版本已经到了 19,与我无瓜

2️⃣下载好 tomcat 之后,解压缩到一个能找到的地方,此时就安装完了,这个 tomcat 就属于 纯绿色软件,要想让 tomcat 正确工作,务必保证电脑上装好了 jdk

1.目录介绍

2.服务器的启动

启动 tomcat 双击 startup.bat;linux/mac 运行 startup.sh

当我们看到这个框框表示 tomcat 启动完成

1️⃣看看 Tomcat 的端口号是否正确绑定:Tomcat 既然是服务器,势必要绑定一个端口(Tomcat 默认的端口号是 8080)

win + R:输入 cmd,确定之后输入 netstat -ano | findstr 8080netstat -ano——查看系统所有端口号;findstr 8080——找包含 8080 关键字)

 2️⃣通过浏览器来访问 tomcat 的欢迎界面:浏览器输入 127.0.0.1:8080

 此时这个页面就是通过网络访问了 tomcat 上的内容

3.部署静态页面

3.1 部署博客系统页面

学习 tomcat 为了部署自己的网站,之前我们写了一个 博客系统(前端)

 此时重新启动 Tomcat;并且在网页中输入:127.0.0.1:8080/Blogging_system/blogging.html

所谓的部署一个网站到 Tomcat 上,就是把对应的内容拷贝到 tomcat 的 webapps 目录即可

如果直接双击 html 也能看到页面,为啥还要往 tomcat 上部署呢❓❓ tomcat 上部署和直接双击运行有啥区别❓❓


🌈直接双击是在自己的电脑上打开 ,别人无法访问;tomcat 上部署是通过网络访问的、跨主机的(我在我的机器上部署了 tomcat,别人就可以跨主机通过网络访问到我的页面)

那么问题又来了:

现在别人的电脑能不能直接访问的的 tomcat❓❓❓


🌈两种方法:1️⃣我有外网 ip2️⃣别人的电脑和我在一个局域网中(连到同一个路由器)

虽然我的电脑上没有外网 ip,但是我有云服务器(云服务器是由外网 ip,云服务器上的 tomcat),就可以部署想要的网站,就能够被别人访问


Tomcat 的基本使用是比较容易的:

1️⃣启动2️⃣把内容拷贝到 webapps3️⃣通过浏览器访问4️⃣使用 netstat 查看端口

我们要学习的重点是基于 Tomcat 进行编程!!

现在要写网站后端(HTTP 服务器),虽然可以重头写一个 HTTP 服务器,但是比较麻烦,Tomcat 已经完成这部分工作,并且 Tomcat 给我们提供了一系列 API,可以让我们在程序中直接调用;此时就可以省去一部分工作(HTTP 服务器肯定要根据 HTTP 协议解析请求报文,还要根据 HTTO 协议,构造响应报文,Tomcat 已经弄好了),更专注于业务逻辑了(写的程序要解决什么问题,是怎么解决的)

接下来我们将学习Tomcat 给提供了一系列 API 也叫 Servlet

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/557607.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

强化学习的应用领域和案例

你好,我是zhenguo(郭震) 今天总结强化学习第四篇:强化学习的应用领域 第一:游戏领域。 强化学习在游戏领域有很多应用,如围棋、象棋、扑克等游戏的AI对战。 例如,AlphaGo使用强化学习技术,在围棋比赛中击败…

要做存储业务,我解析了一个项目的源码

最近在做存储相关的业务,更具体的来说是存储相关的研发,于是就上网查了一下相关的资料,思虑再三打算从最简单的 Json 数据交换格式开始研究。 JSON是独立于编程语言的数据交换格式,几乎所有与网络开发相关的语言都有JSON函数库&am…

chatgpt赋能Python-python_figsize

Python figsize:图形大小的更改 在Python数据可视化中,通过更改图形的大小可以使得图形更易于阅读和理解。绘图函数的“figsize”参数可以让您控制图形的大小。本文将探讨figsize的含义、使用示例以及如何根据您的需要精确调整图形大小。 什么是figsiz…

【CSAPP】虚拟内存(VM)

💭 写在前面:本文将学习《深入理解计算机系统》虚拟内存部分,CSAPP 是计算机科学经典教材《Computer Systems: A Programmers Perspective》的缩写,该教材由Randal E. Bryant和David R. OHallaron 合著。 📜 本章目录…

【Python】判断语句 ④ ( 判断语句嵌套 )

文章目录 一、判断语句嵌套1、语法说明2、代码示例 一、判断语句嵌套 1、语法说明 在 Python 的开发场景中 , 除了 单个条件判定 : if 条件判定 , if else 条件判定 ;多个并列条件判定 : if elif else 条件判定 ; 之外 , 还有 满足 前置条件判定 后 进行 第二次条件判定 的开…

C#,码海拾贝(21)——线性方程组求解的全选主元高斯消去法之C#源代码,《C#数值计算算法编程》源代码升级改进版

using System; namespace Zhou.CSharp.Algorithm { /// <summary> /// 求解线性方程组的类 LEquations /// 原作 周长发 /// 改编 深度混淆 /// </summary> public static class LEquations { /// <summary> /…

chatgpt赋能Python-python_geany

了解Python Geany: 一种强大且高效的Python IDE 介绍 Python Geany是一种非常流行的Python集成开发环境&#xff08;IDE&#xff09;&#xff0c;是由Geany团队开发的。它是一种跨平台的开发工具&#xff0c;可在Windows、Linux和macOS等不同平台上运行。Python Geany提供了支…

Linux常用命令——host命令

在线Linux命令查询工具 host 常用的分析域名查询工具 补充说明 host命令是常用的分析域名查询工具&#xff0c;可以用来测试域名系统工作是否正常。 语法 host(选项)(参数)选项 -a&#xff1a;显示详细的DNS信息&#xff1b; -c<类型>&#xff1a;指定查询类型&am…

小白畅玩免费支持ChatGPT3和4,一键定制自己专属AI

AI爆炸时代。你不用AI&#xff0c;别人就会用AI,当别人用AI,为自己给工作生活赋能时候。生活自在&#xff0c;工作高效&#xff0c;AI正在潜移默化改变我们生活 基于OPEN AI平台 轻松让AI 为你的生活赋能. 总之我现在生活已经离不开AI&#xff0c;帮助了。 不管是工作上问题…

第四范式涂威威:企业专属大模型技术需闭环数据、思维链学习、高落地效率...

‍ 近日&#xff0c;以“智行天下 能动未来”为主题的第七届世界智能大会隆重举办&#xff0c;第四范式副总裁、主任科学家涂威威出席高峰会&#xff0c;与中国工程院院士邬江兴、德国弗劳恩霍夫电子纳米系统研究所所长Harald Kuhn、高通公司中国区董事长孟樸等院士及企业代表&…

chatgpt赋能Python-python_for_in遍历列表

Python for-in循环遍历列表&#xff1a;最简单易用的方法 Python是最流行的编程语言之一&#xff0c;也是许多开发人员的首选工具。其中&#xff0c;for循环是Python最重要的控制结构之一&#xff0c; for-in循环是其中最常用的形式之一。在本文章中&#xff0c;我们将重点介绍…

做流量卡代理,看看人家是怎么赚钱的?

这两年来&#xff0c;流量卡市场可谓是一片欣欣向荣&#xff0c;三大运营商也推出了多款热门套餐。 ​ 作为上网的主要方式&#xff0c;流量卡在这两年可谓是“风光无限”&#xff0c;上至60岁老人&#xff0c;下至16岁的学生都在使用&#xff0c;就连小编的亲戚朋友也都在网上…

chatgpt赋能Python-python_gi

Python-GI: 一个强大的Python库 Python-GI是一个用于Python的开源库&#xff0c;它提供了一个统一的接口来访问底层的系统库。这个库的目的是方便Python开发人员使用底层操作系统或系统库的底层功能。Python-GI是GNOME桌面环境的一部分&#xff0c;它为Python开发人员提供了访…

因果

数字化转型已经喊了很多年了&#xff0c;但是很多人仍然不明白数字化转型是怎么回事&#xff0c;为啥要转。很多人甚至以为数字化转型就是个营销噱头&#xff0c;还有人跟着瞎起哄什么互联网红利消失、中国供给侧和消费侧人口红利消失等等。 我不讲&#xff0c;很多人都不知道。…

字节跳动开源其云原生数据仓库 ByConity

动手点关注 干货不迷路 ‍ ‍项目简介 ByConity 是字节跳动开源的云原生数据仓库&#xff0c;它采用计算-存储分离的架构&#xff0c;支持多个关键功能特性&#xff0c;如计算存储分离、弹性扩缩容、租户资源隔离和数据读写的强一致性等。通过利用主流的 OLAP 引擎优化&#xf…

吴恩达 x OpenAI Prompt Engineering教程中文笔记

Datawhale干货 作者&#xff1a;刘俊君&#xff0c;Datawhale成员 完整课程&#xff1a;《吴恩达ChatGPT最新课程》 &#x1f433;Reasons & Importance Important for research, discoveries, and advancement 对研究、发现和进步很重要 Accelerate the scientific resea…

案例15:Java餐厅外卖管理系统设计与实现开题报告

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

一步步教你安装RabbitMQ Server在Ubuntu上,并让其支持远程访问!

文章目录 前言1.安装erlang 语言2.安装rabbitMQ3. 内网穿透3.1 安装cpolar内网穿透(支持一键自动安装脚本)3.2 创建HTTP隧道 4. 公网远程连接5.固定公网TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 转载自cpolar内网穿透的文章&#xff1a;无公网IP&…

针对自主泊车的多相机视觉惯导同时定位与建图方案

文章&#xff1a;Multi-Camera Visual-Inertial Simultaneous Localization and Mapping for Autonomous Valet Parking 作者&#xff1a;Marcus Abate, Ariel Schwartz, Xue Iuan Wong, Wangdong Luo, Rotem Littman, Marc Klinger, Lars Kuhnert, Douglas Blue, Luca Carlone…

chatgpt赋能Python-python_geohash

Python GeoHash: 将位置信息转换为字符串 在现代生活中&#xff0c;我们经常需要处理和分析大量的位置信息&#xff0c;包括地图、GPS、定位等。而一种流行的做法是将位置信息转换为字符串&#xff0c;并使用该字符串进行存储、传输和查询。GeoHash就是一种将位置信息压缩为字…