当前位置: 首页 > news >正文

理解HTTPS及配置

HTTP的弊端及HTTPS的由来

众所周知HTTP协议是以TCP协议为基石诞生的一个用于传输Web内容的一个网络协议,在“网络分层模型”中属于“应用层协议”的一种.那么在这里我们并不研究该协议标准本身,而是从安全角度去探究使用该协议传输数据本身存在的安全问题:(1)、通信使用明文(不加密),内容可能被窃听;(2)、不验证通信方的身份,因此可能遭遇伪装;(3)、无法证明报文的完整行,所以可能被篡改.

为了解决HTTP协议存在的安全性问题,上世纪90年代由网景(NetScape)公司设计了SSL(Secure Sockets Layer)协议——“安全套接层”协议.经过多年发展SSL在互联网上广泛应用,标准化后名称改为TLS(Transport Layer Security)——“传输层安全”协议.

所谓的HTTPS即是“HTTP+SSL/TLS”的结合使用而已.解决的是HTTP协议数据传输的安全性问题——在HTTP协议层和TCP传输层之间加入“安全层”,使得应用层数据报经过加密后再传输,保证数据在传输过程中的完整性.

那么,SSL/TLS在数据传输过程中是如何实现加密保证数据完整性的呢?在此,我们需要再进一步探讨该协议的加密逻辑.

加密算法有两种,分别是“对称加密”和“非对称加密”.(本文不对密码学中的加密算法的实现做探讨,仅解释加密原理).

对称加密

关于“对称加密”,可以理解成一种“互逆”的数学运算(对比单向加密它是一种可逆的加密算法).也就是说有加密,就可以解密,但是不管是加密还是解密的过程中,必须有一个至关重要的称之为“密钥”的东西参与运算.

对称加密最大的特点就在于加密和解密使用“相同的”密钥.那么关键问题来了——客户端和服务器交互使用共同的“密钥”来加密通信,这就需要服务器将密钥传输给客户端,但是如此操作又如何才能够保证密钥在传输过程中的安全性呢?如果密钥在传输过程中遭遇第三方拦截,那就意味着双端通信之于第三方而言和明文通信没有区别了.也就是说对称加密并不适用于密钥需要网络传输的应用场景.

由此,诞生了“非对称加密”.

非对称加密

所谓的“非对称加密”就是加密和解密使用的密钥是不同的,双端通信各自产生公钥和私钥匙,并交换双端的公钥用于通信加密.如下图所示,当服务器把公钥交给客户端,客户端在通信时使用公钥对数据进行加密处理,即使公钥在传输过程中遭遇第三方拦截,由于解密的密钥始终存储在服务端并不会对外公开,所以拦截方仅用一个公钥是无法解密数据的.

但是上述应用场景仍然存在一定的被窃听的风险.也就是说,作为窃听者,在拦截服务器响应给客户端的公钥后,伪造服务端身份,给客户端响应窃听者的公钥.此后客户端使用窃听者的公钥加密数据,窃听者在拦截数据消息后,利用自己的私钥进行解密,得到明文数据后篡改数据,然后在使用服务器公钥加密数据和服务器通信.整个通信的过程中,客户端都无法察觉自己通信的对端到底是窃听者还是服务器.

观察下图中的图示模型,假设通信过程已被窃听.那么问题到底出在哪里?

我们可以从整个流程的一开始去分析.

客户端在第一次请求公钥,并在响应中得到了来自“对端”的公钥.然后就利用该“公钥”通信.问题就是出在了这个环节——显而易见,作为客户端并没有对该“公钥”的“来源”做验证.换句话说,客户端并不清楚,该“公钥”是否真的来自真正的服务器而不是第三方窃听者.

如此,客户端就必须对“公钥”做验证,确定该公钥确实是来自合法的服务器后,才能够保证双端通信的安全性.

CA认证机制

这里需要引入第三方机构: 证书颁发机构(CA, Certificate Authority)即颁发数字证书的机构.是负责发放和管理数字证书的权威机构,作为电子商务交易中受信任的第三方,承担公钥体系中公钥合法性检验的责任.

CA中心会为每个使用公钥的用户发放一个数字证书,数字证书的作用是证明证书中列出的用户公钥的合法性.CA机构的数字签名使得攻击者无法伪造和篡改证书.换句话说,证书无法篡改,只要证书是有效且合法的,那么证书中的公钥就是有效且合法的!

服务器将公钥提供给CA机构,CA机构使用自己的私钥将服务器公钥加密后将CA证书(该证书保存有服务器公钥)返回给服务器.一般操作系统或者浏览器中都会内置CA根证书.当客户端(比如浏览器)请求服务器时,服务器会将CA证书提供给客户端,客户端获取到CA证书后会使用CA根证书进行本地验证(验证通过即表明服务器CA证书的合法性,间接表明公钥来源的合法性).

相关文章:

理解HTTPS及配置

HTTP的弊端及HTTPS的由来 众所周知HTTP协议是以TCP协议为基石诞生的一个用于传输Web内容的一个网络协议,在“网络分层模型”中属于“应用层协议”的一种.那么在这里我们并不研究该协议标准本身,而是从安全角度去探究使用该协议传输数据本身存在的安全问题:(1)、通信使用明文(不…...

IP-guard浏览器上传下载智能加解密,让管理更省心省力

现在员工日常工作中经常会通过浏览器访问公司的业务系统(OA、JIRA等),或者访问其他外部系统,访问下载服务器的文档变得更便捷,工作地点也不再局限于办公室中。为确保应用系统机密安全且又不影响员工的正常工作&#xf…...

leetcode day22 位运算

位运算咋这么老难 剑指 Offer 56 - I. 数组中数字出现的次数 借评论区大佬答案:nums [1,2,10,4,1,4,3,3] a^a0a^0aa^b^ca^c^ba&(-a)最低位为1的二进制(从又到左)所有的异或结果得到sum2^108flag-8&88可分为两组,一组为与…...

java中如何判断map是否为空

java中判断map是否为空的方法是:利用isEmpty()函数来判断。函数介绍:isEmpty()是Java中用于判断某种容器是否有元素的系统库函数。如用来判断ArrayList,HashSet,HashMap是否有元素等。在Java中,可以用isEmpty();判断一…...

C语言数据结构:链表的增删改查及动态创建

目录 一,链表与数组 ① 定义区别 ② 实现区别 二,链表遍历和计算链表中节点数量 ① 链表遍历 ② 计算节点数量 三,查找链表节点 四,增加节点到链表中 ① 在节点后方插入 ② 在节点前方插入 ● 在头节点前方插入 ● 在…...

「Python 基础」I/O 编程、正则表达式

文章目录1. I/O 编程文件读写StringIO 和 BytesIO操作文件和目录序列化2. 正则表达式进阶re 模块1. I/O 编程 I/O指Input/Output; Input Stream 从外面(磁盘、网络)流进内存; Output Stream 从内存流到外面; 同步 …...

java 把pdf图片文档和文章文档转成文字的方法

java 提供了一些库和工具可以用来把 PDF 文档和图片文档转成文本。 Apache PDFBox:这是一个开源的 PDF 库,可以用来提取 PDF 文件中的文本内容。 iText:这是一个用于创建和处理 PDF 文件的库,可以用来提取 PDF 文件中的文本内容。…...

JavaScript 中的全部对象

宿主对象(host Objects):由 JavaScript 宿主环境提供的对象,它们的行为完全由宿主环境决定。 【 浏览器环境宿主,全局对象window,window 上又有很多属性,如 document。 全局对象 window 上的属…...

【教学典型案例】23.部分服务总是频繁出现掉线情况

目录一:背景介绍问题描述解决二:问题分析过程解决过程设计到的知识1、nacos的data目录作用。2、nacos data目下的protocol目录3、nacos ip混乱问题三:总结一:背景介绍 问题描述 因为某些特殊原因需要把nacos迁移到另一个版本的n…...

线程安全 List 效率测试

List 常见类以及各自优缺点可自行参考 https://blog.csdn.net/weixin_39883065/article/details/111197724 本机环境 java 版本:1.8.0_161 window 信息: 测试代码 下面通过代码测试 List 线程安全类 Vector、Collections.synchronizedList(List lis…...

LeetCode 热题 C++ 581. 最短无序连续子数组 617. 合并二叉树

581. 最短无序连续子数组 给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。 请你找出符合题意的 最短 子数组,并输出它的长度。 示例 1: 输入&am…...

鉴源论坛 · 观模丨模型检查综述

作者 | 李建文 华东师范大学软件工程学院博导 版块 | 鉴源论坛 观模 01 模型检查的历史 模型检查是一种起源于20世纪70年代末的形式化验证技术。该技术最初由Edmund M. Clarke、E. Allen Emerson和Joseph Sifakis提出,他们因在模型检查领域的贡献而获得了2007年的…...

Easy Deep Learning——池化层

池化是什么?它有什么作用? 还是草地的场景,把草地分成一块块的网格,数量还是太多了,如何继续简化输入数据呢? 这时候可以只取一块网格中所有的小草的大小形状的平均值或者最大值作为一个输入数据,这样就大…...

TryHackMe-VulnNet: Active(ez 域渗透)

VulnNet: Active VulnNet Entertainment在他们以前的网络中遇到了不好的时光,该网络遭受了多次破坏。现在,他们移动了整个基础架构,并再次聘请您作为核心渗透测试人员。您的目标是获得对系统的完全访问权限并破坏域。 这应该是我在thm打的最…...

TencentOS Server 安装 PostgreSQL

TencentOS 简介 2019 年,随着腾讯公司外部客户的需求,以及公司开源协同战略的推进,tlinux 对外开源并进行了品牌升级,升级为 TencentOS Server。TencentOS 包含三大场景,分别如下: TencentOS Server&…...

多线程的风险 --- 线程安全

✨个人主页:bit me👇 ✨当前专栏:Java EE初阶👇 ✨每日一语:低头赶路,敬事如仪;自知自心,其路则明。 目 录🍸一. 线程不安全🍹二. 线程不安全的原因&#x1f…...

Linux信号详解

文章目录Linux信号什么是信号**从生活角度理解: **技术应用角度的信号进程的注意事项信号概念用kill -l命令可以察看系统定义的信号列表信号处理常见方式概览信号产生通过终端按键产生信号使用signal函数自定义SIGINT信号的处理方式使用sigprocmask函数阻塞2号信号和40号信号vo…...

JAVA使用POI操作EXCEL

设置公式totalRow.createCell(4).setCellFormula("SUM(E9:E35");// 执行公式wb.setForceFormulaRecalculation(true);合并单元格sheet.addMergedRegion(new CellRangeAddress(0, 0, 3, 7));单元格格式CellStyle cellStyle wb.createCellStyle();// 字体XSSFFont fon…...

只做笔记有必要买apple pencil吗?苹果笔的代替笔推荐

如果仅仅使用IPAD来进行打游戏和看剧的话,未免有些浪费。ipad的作用还是挺大的,可以用来做学习笔记,也可以用来做绘画,也可以用来做一些重要的内容。很多人都会认为,苹果的电容笔很好用,但是价格上要比一般…...

Hive---sqoop安装教程及sqoop操作

sqoop安装教程及sqoop操作 文章目录sqoop安装教程及sqoop操作上传安装包解压并更名添加jar包修改配置文件添加sqoop环境变量启动sqoop操作查看指定mysql服务器数据库中的表在hive中创建一个teacher表跟mysql的mysql50库中的teacher结构相同将mysql中mysql50库中的sc数据导出到h…...

【C++】register 关键字

文章目录一. 什么是寄存器?二. 为什么要存在寄存器?三. register 修饰变量一. 什么是寄存器? 我们都知道,CPU主要是负责进行计算的硬件单,但是为了方便运算,一般第一步需要先把数据从内存读取到CPU内&…...

剑指 Offer II 024. 反转链表

题目链接 剑指 Offer II 024. 反转链表 easy 题目描述 给定单链表的头节点 head,请反转链表,并返回反转后的链表的头节点。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2: 输入:h…...

从Linux内核中学习高级C语言宏技巧

Linux内核可谓是集C语言大成者,从中我们可以学到非常多的技巧,本文来学习一下宏技巧,文章有点长,但耐心看完后C语言level直接飙升。 本文出自:大叔的嵌入式小站,一个简单的嵌入式/单片机学习、交流小站 从…...

详解Python的装饰器

Python中的装饰器是你进入Python大门的一道坎,不管你跨不跨过去它都在那里。 为什么需要装饰器 我们假设你的程序实现了say_hello()和say_goodbye()两个函数。 def say_hello():print "hello!"def say_goodbye():print "hello!" # bug hereif…...

k8s-Pod域名学习总结

k8s-Pod域名学习总结 大纲 k8s内置DNS服务 配置Pod的域名服务 CornDNS配置 默认Pod的域名 自定义Pod的域名 实战需求 1 Pod有自己的域名 2 集群内部的Pod可以通过域名访问其他的Pod 基础准备: 1 k8s 集群版本1.17 k8s内置DNS服务 k8s1.17安装完成后自动创建…...

0405习题总结-不定积分

文章目录1 不定积分的基本概念2 直接积分法-基本积分公式3 第一换元法-凑微分形式法4 第二类换元法5 分部积分求不定积分6 表格法积分7 有理函数求积分后记1 不定积分的基本概念 例1 f(x){x1,x≥012e−x12,x<0求∫f(x)dxf(x) \begin{cases} x1,\quad x\ge0\\ \frac{1}{2}e^…...

QT 常用控件类型命名参考

拟定的QT的控件命名规则&#xff1a;蛇形命名方式 控件类型开头&#xff0c;以下是QT控件类型命名的参考范例 Buttons Buttons起始字符串对象名称举例Push Buttonbuttonbutton_loginTool Buttontool_button / buttonbutton_switchRadio Buttonradio_button / radioradio_boy…...

MATLAB与图像处理的那点小事儿~

目录 一、学习内容 二、matlab基本知识 三、线性点运算 四、非线性点运算&#xff0c;伽马矫正 五、直方图 1、直方图均衡化 &#xff08;1&#xff09;使用histep函数实现图像均衡化 &#xff08;2&#xff09;使用自行编写的均衡化函数实现图像均衡化 2、直方图规定…...

第十四届蓝桥杯模拟赛(第三期)Java组个人题解

第十四届蓝桥杯模拟赛&#xff08;第三期&#xff09;Java组个人题解 今天做了一下第三期的校内模拟赛&#xff0c;有些地方不确定&#xff0c;欢迎讨论和指正~ 文章目录第十四届蓝桥杯模拟赛&#xff08;第三期&#xff09;Java组个人题解填空题部分第一题【最小数】第二题【E…...

Go语言之条件判断循环语句(if-else、switch-case、for、goto、break、continue)

一、if-else条件判断语句 Go中的if-else条件判断语句跟C差不多。但是需要注意的是&#xff0c;Go中强制规定&#xff0c;关键字if和else之后的左边的花括号"{“必须和关键字在同一行&#xff0c;若使用了else if结构&#xff0c;则前段代码快的右花括号”}"必须和关…...