【为什么可以相信一个HTTPS网站】

news2024/7/6 18:48:46

解决信用,仅仅有加密和解密是不够的。加密解密解决的只是传输链路的安全问题,相当于两个人说话不被窃听。可以类比成你现在生活
的世界——货币的信用,是由政府在背后支撑的;购房贷款的信用,是由银行在背后支撑的;你肯购买视频网站的会员,也是由公司的信誉在背后支撑;就连比特币的信用也需要有知名人士(比如马斯克等)在不断喊话……我想要强调的是,归根结底,信用源于我们的世界,信用的背后不是数学和算法,而是人,以及围绕人形成的组织、机构、国家等。我们回到一个很小的问题,你在上网时候,凭什么可以相信你访问的网站没有骗你?今天我们就以这个话题为引,从 HTTPS 协议的信用角度去看互联网的整个信用体系。

摘要和签名

现实的生活当中,如果想证明一份合同没有被修改过,人们会在合同上盖一个齐缝章,并附上自己的签名。签名和盖章其实是一个含义,目的是证明自己签署过某份协议,而且一经签署,协议就不能再变更。如果想阻止一份合同被修改,最容易想到的方式是加密。合同一旦被加密了,要修改就必须原文和密文一起修改。虽然这没有解决最本质的问题——谁来提供信用。但是这样的种做法解决了一个最基础的问题。如果有人想修改合同,就必须知道密钥。

摘要算法

但是加密算法的计算量较大,而且结果通常比原文体积大。那是否有其他更好的处理方式呢?其实一个更简单的做法,就是利用摘要算法。摘要,顾名思义,和现实中文章的摘要是一样的。相当于给一篇文章,形成一个提要。只不过,计算机世界的摘要算法算出来的结果并不是对原文真的概括总结,而是一个大数字。给计算机一篇文章,计算机用摘要算法(主要是哈希类算法)生成一个字符串,如果文章内容改变,哪怕是一个字,一个标点符号,摘要也会完全改变。和完全加密一篇文章相比,摘要的体积很小,因此非常有利于存储和传输。通常对于一个给定的摘要算法,无论你的文章多大,有多少字节,最终生成摘要的字节数是固定的。以 MD5 摘要算法为例:
md5(1字节数据)
md5(1M数据)
无论数据多大,经过 MD5 计算后,都会形成一个 128 位的值,换算成 16 进制是 16 个字符。可见,摘要算法是比较省空间的,如果用加密算法,那么体积会和原文大小正相关。用 MD5摘要一个 100M 的视频文件,也会形成只有 128 位的值。

摘要的价值

摘要是对原文的证明,从原文到摘要是一个不可逆的过程。通过原文可以计算出摘要,一旦原文发生变化,哪怕是一个标点符号,摘要也会发生变化。而已知一个摘要,想要反推出原文,几乎是不可能的。因为摘要和原文并不是一对一的关系,是多个原文对应一个摘要。而且,想要找到两个摘要碰撞的原文是非常困难的发生概率相当于买彩票中大奖 。而且就算黑客找到了碰撞的原文,也未必可以起到作用。当然,摘要碰撞是危险的,下面我们会讨论摘要碰撞的危害。因此,我们通常会选择碰撞难度更高的摘要算法,这里推荐你在实战中用 SHA-1 摘要算法。下面我们聊聊摘要碰撞的危害,举个具体的例子:目前多数网站用户的密码是以摘要的形式保存的。你可能会问,为什么不以原文形式保存呢?这是因为程序员会经常接触到数据库,而黑客也有可能黑进公司的数据库,因此密码以摘要显示保存更加安全,可以有效防止用户敏感数据被盗。因此,网站的设计,一般不存储用户的密码,只存储用户密码的摘要。如果网站的数据库被攻破,黑客拿到的是用户密码的摘要。拥有摘要什么也做不了,因为通过摘要找不到用户密码的原文,仍然不能登录这个网站。但是如果黑客能找到一个和密码碰撞的原文呢? 那黑客就可以正常登录了。因此摘要碰撞是非常危险的,好在目前的算法都足够安全。稍微小结一下,摘要算法解决了以下这几个问题:
1.
为原文生成固定长度的内容证明(内容摘要);
2.
摘要无法被逆向得到原文,看上去是随机的,黑客拿到了也不知道原文;
3.
极少概率碰撞:不同的内容极大概率(绝大多数接近 100%)会生成不同的摘要。但是,你要明白,摘要只是一个工具,它可以用来解决很多问题,比如说用户密码存储问题。对于互联网的信用,它还只是工具。

签名

摘要的另一个非常重要的用途就是签名。举个例子,张三和李四签署一份合同。如果张三将合同生成摘要,再用自己的私钥加密摘要,得到一个密文串,那么这个串就是张三对合同的数字签名(DIgital Sign)。张三生成好数字签名,将自己的公钥、合同原文以及数字签名交给李四保管,就基本上达成了今天我们签约双方交换合同的效果。你可以这样思考,数字签名是对摘要的加密,因此数字签名本身还拥有摘要能力的。如果原文没有被修改,那么下面的条件会满足
公钥解密(数字签名) == 签订合同时的原文摘要 == 摘要算法(当
前原文) == 当前摘要
比如原文被修改,那么可以通过重新计算摘要,对比解密后的数字签名(其实就是早先的摘要)。对张三而言,李四不知道自己私钥,因此他篡改不了自己签名的这份合同。对李四而言,张三无法抵赖自己没有签署过这份合同,因为李四可以拿着张三的公钥解密得到摘要,然后再对比合同原文的摘要。因为是张三私钥加密,如果张三的公钥能解开,那说明就是张三签署的合同。

证书

在上面张三和李四的例子当中还存在着一个重要的缺陷,就是张三、李四的公钥凭什么具有公信力?一份合同,张三李四都要签名,然后互相交换签名的数据。但是请你注意,这里咱们只是用到了技术的手段,或者你可以理解成这是一个数学的方式。信用本身不能用数学解决,数学只是工具。这里还存在着一个重要的缺陷,就是谁来证明,张三给李四的公钥,就是张三的公钥;李四给张三的公钥,就是李四的公钥。而谁又来证明张三和李四,是合法的两个个人,具有签署合同的权利。

信用的提供

这里涉及的一个最基本问题是,信用必须有人提供。只有权威机构(比如公安局)可以证明张三是张三,李四是李四。同理,互联网世界也需要机构提供证书,由机构证明他们的公钥。这并不是说,张三自己不能制作自己的证书,只不过张三做的证书没有公信力。互联网中,加密算法、签名算法都是公开的,只不过张三自己制作的证书背后没有信用的支持。

证书制作

证书是一个身份证明文件,比如互联网中,经常会为一个域名制作证书。通常的一个域名证书会有一些基础信息:

  • 覆盖的域名
  • 证书的用途
  • 签发时间
  • 到期时间
  • 名方的公钥
    除了证明身份,证书还有一个重要的作用就是让其他人可以使用自己的公钥。比如自己签名的数据,就可以用自己的公钥解密对照。总的来说,你可以把这些基础信息视作文本,最重要的,就是要有权威机构对证书的签名。权威机构用自己的私钥对证书进行签名,于是证书上还
    需要增加 3 个信息:
  • 权威机构的名称
  • 权威机构的签名
  • 权威机构的网址

最后这步签名操作就好像护照上要盖个章一样,有了这个权威机构的签名,证书就合法了。下面是拉勾的 HTTPS 证书,你可以做个对比学习:
在这里插入图片描述
有一些关键信息,比如签名和公钥,虽然没有在这个图片中体现,但这些信息也是在证书中的。

信用链的验证

现在问题来了,张三把证书给了李四,李四拿到张三的证书,并看到某权威机构的签名。李四的第一反应就是——这个签名是权威机构的吗?比如上图中拉勾的签名,当你打开拉勾教育的时候,你相信这个证书是 GlobalSign 签发的吗?大部分同学都不知道 GlobalSign吧? 其实我也不知道这家机构。但是这不重要,用户甚至不需要理解 GlobalSign,计算机产业的底层建筑帮助大家解决了这个问题——这个被称作信用链。当我们用 HTTPS 协议打开拉勾教育的页面时,这个证书会随着 HTTPS 的握手被下载到本地。浏览器打开证书,发现提供方式 GlobalSign。GlobalSign(Certificate Authority,CA)是一家证书颁发机构。浏览器并不需要理解 GlobalSign 是谁,在验证过程中,浏览器会查找操作系统中,是否已经安装了 GlobalSign 的证书。如果已经安装了,浏览器就会相信这个证书。操作系统的提供商,比如微软、苹果、谷歌总不会恶意安装非法证书砸自己的招牌。只要用户本机安装了GlobalSign 证书,那么 GlobalSign 证书的公钥就应该可以解密网站证书的签名,得到网站证书的摘要,那么就可以信任 GlobalSign 签发的这张拉勾的证书。如果操作系统中没有安装 GlobalSign 的证书该怎么办呢?不要着急,这个时候,浏览器会去GlobalSign 的网站下载证书,拿到 GlobalSign 证书后,浏览器也不确定 GlobalSign 是一个权威机构,这个时候浏览器会看 GlobalSign 证书上有没有签发方。如果有,递归进行检查签发方的证书是否安装在操作系统本地,直到找到根证书。根证书的特点是,这个机构的证书没有其他机构为它签名。只要操作系统中有根证书,那么 GlobalSign 就值得信任,因此拉勾值
得信任。在上述过程中,操作系统的提供商起到重要的作用。操作系统安装的时候,会预装一些证书。这些证书我们称为根证书,能签发根证书的机构就是根证书提供商。根证书提供商在全球很少,通常只有信誉非常棒的机构才能担当。而且成为根证书要得到很多资质,如果中间出现问题,还会被取消资格,特别是还需要和多家操作系统提供商达成合作,比如微软、苹果、谷歌等。

信任链的具体形式

以上的层层证明形式,构成了一个信任链。一般的,信任链有 3 层。最顶层是根证书和根证书机构(Root Certificate,Root CA)。前面我们提到,根证书往往是随着操作系统安的特殊情况需要用户自己安装。比如说一些抓包工具,会要求用户自己安装一个根证书。中间的是间证书机构,它们自己的证书是由 Root CA 签名颁发的,同时它们向最底层的终端机构提供证书。
在这里插入图片描述
根证书是自签名,中间证书是根证机构书签名,终端证书(比如拉勾网)是中间证书机构签名。这样就构成了一个信任链,并且也增加了犯罪的成本。犯罪分子如果想要冒充证书,那么它的证书就需要获得中间证书提供商的签名,而获得签名需要购买证书。犯罪分子就算购买了证书,也只能购买自己域名的证书,因此无法伪装成其他网站。但要特别注意的是,如果犯罪分子设法在你的个人电脑上安装了它的根证书,那后果就严重了,它可以冒充成任何网站。

总结

解决信用不是一个数学问题。基于信任关系塑造信用是当今社会的主流做法,比如基于社交关系的信用、基于国家机器的信用、基于公司信誉的信用……另一方面,当然工具也是必不可少的。摘要,是一种数学的证明,本身体积很小,还不存在密钥管理和分发问题,适合在网络工作。在摘要上用私钥加密就是签名,签名可以防止数据被篡改、伪造等。在摘要和签名的基础上,可以利用原本的社会关系,让一些信用优秀的机构提供信用,这就是证书的颁发和信用链体系。
当用户用浏览器打开一个 HTTPS 网站时,会到目标网站下载目标网站的证书。接下来,浏览器会去验证证书上的签名,一直验证到根证书。如果根证书被预装,那么就会信任这个网站。也就是说,网站的信用是由操作系统的提供商、根证书机构、中间证书机构一起在担保。

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

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

相关文章

### Cause: dm.jdbc.driver.DMException: 列[URI]长度超出定义

### Cause: dm.jdbc.driver.DMException: 列[URI]长度超出定义 报错信息: ### Cause: dm.jdbc.driver.DMException: 列[URI]长度超出定义 ; 列[URI]长度超出定义; nested exception is dm.jdbc.driver.DMException: 列[URI]长度超出定义at org.springframework.jdb…

计算机毕业论文内容参考|基于Python的互联网金融产品交易平台的设计与实现

文章目录 导文摘要前言绪论课题背景国内外现状与趋势课题内容相关技术与方法介绍技术分析需求分析技术分析技术设计系统架构技术实现产品管理模块订单管理模块支付管理模块总结与展望导文 基于Python的互联网金融产品交易平台的设计与实现 摘要 本文提出并实现了一种基于Pytho…

《计算机网络—自顶向下方法》 Wireshark实验(六):IP 协议分析

IP 协议(Internet Protocol),又译为网际协议或互联网协议,是用在 TCP/IP 协议簇中的网络层协议。主要功能是无连接数据报传送、数据报路由选择和差错控制。IP 协议是 TCP/IP 协议族的核心协议,其主要包含两个方面&…

Vue入门学习笔记:TodoList(三):实例中的数据、事件和方法

目录: Vue入门学习笔记:TodoList(一):HelloWorld Vue入门学习笔记:TodoList(二):挂载点、模板、实例 Vue入门学习笔记:TodoList(三)&a…

有关浪涌保护器的基础知识

浪涌和瞬态电压浪涌是电路上电压和电流的临时上升。它们的电压范围大于 2000 伏,电流范围大于 100 安培。典型的上升时间在1到10微秒范围内。瞬态或浪涌是最常见的电源问题,其瞬时破坏性会造成重大损坏,例如电气或电子设备故障、频繁停机、数…

MySQL正则表达式与存储过程

一、正则表达式(REGEXP) 1、正则表达式匹配符 字符解释举列^匹配文本的开始字符’ ^aa ’ 匹配以 aa 开头的字符串$匹配文本的结束字符’ aa$ ’ 匹配以aa结尾的字符串.匹配任何单个字符’ a.b 匹配任何a和b之间有一个字符的字符串*匹配零个或多个在它…

Webpack4 核心概念

文章目录 Webpack4 核心概念概述安装webpack简单使用配置webpack.config.js配置package.json打包 核心概念modeentry 和 outputentry配置说明output配置说明配置单入口配置多入口 loader安装babel、babel-loader、core-js配置.babelrc配置webpack.config.js配置package.json编写…

107.(cesium篇)cesium椎体上下跳动

听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行完整代码包,运行如有问题,可“私信”博主。 效果如下所示: 下面献上完整代码,代码重要位置会做相应解释 <html lang="en"> <

等保2.0常见问题汇总

等保2.0发布后&#xff0c;整个网络安全行业积极学习并按照新规范进行网络系统的部署。然而许多人仍然对等保制度的来历、发展、演变以及贯彻重点存在疑问。等保2.0依然在整个实施流程上由五个标准环节构成&#xff1a;定级、备案、建设整改、等级测评、监督检查五个方面。本文…

Science文章复现(Python):图1 - Aircraft obs(机载的观测 CO2)

之前有写过science文章后处理的复现Science文章复现&#xff08;Python&#xff09;&#xff1a;在机载观测中明显的强烈南大洋碳吸收 在这里是针对图细节的理解&#xff1a; 首先需要下载这个项目 https://github.com/NCAR/so-co2-airborne-obs 这里的环境配置会比较麻烦 con…

Java设计模式 13-命令模式

命令模式 一、智能生活项目需求 看一个具体的需求 1)我们买了一套智能家电&#xff0c;有照明灯、风扇、冰箱、洗衣机&#xff0c;我们只要在手机上安装 app 就可以控制对这些家电工作。 2)这些智能家电来自不同的厂家&#xff0c;我们不想针对每一种家电都安装一个 App&…

怎样实现RPC框架

随着微服务架构的盛行&#xff0c;远程调用成了开发微服务必不可少的能力&#xff0c;RPC 框架作为微服务体系的底层支撑&#xff0c;也成了日常开发的必备工具。当下&#xff0c;RPC 框架已经不仅是进行远程调用的基础工具&#xff0c;还需要提供路由、服务发现、负载均衡、容…

两种QGraphicsItem方式实现橡皮擦功能(矩形选中框)

方法一&#xff1a;继承QGraphicsItem实现橡皮擦功能。&#xff08;gif中红色矩形框&#xff09; 方法二&#xff1a;继承QGraphicsRectItem实现的橡皮擦功能。&#xff08;gif中蓝色矩形框&#xff09; 通过以上GIF可以看出两款橡皮擦都具有位置拖动和大小拖动的功能&#xff…

Nacos必知必会:这些知识点你一定要掌握!

前言 Nacos 是一个开源的服务发现、配置管理和服务治理平台&#xff0c;是阿里巴巴开源的一款产品。 Nacos 可以帮助开发者更好地管理微服务架构中的服务注册、配置和发现等问题&#xff0c;提高系统的可靠性和可维护性。 本文将介绍 Nacos 的必知必会知识点&#xff0c;包括…

Zookeeper基础和简单使用

安装与配置 概念 基于观察者模式设计的分布式服务管理框架&#xff0c;负责存储和管理大家都关心数据&#xff0c;然后接受观察者的注册&#xff0c;一单这些数据的这状态发生了变化&#xff0c;Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应 特点…

当JS遇到加密:解密你的JS代码!

作为一名程序员&#xff0c;我们经常会遇到各种加密算法&#xff0c;比如常见的AES、RSA、MD5等等&#xff0c;但是今天我想和大家聊一聊一个日常生活中比较常见的加密方式——JavaScript加密。 在我们日常浏览网页时&#xff0c;经常会看到一些网站的JavaScript代码经过加密&…

【Redis】布隆过滤器原理与应用

文章目录 原理应用实战总结 布隆过滤器&#xff08;Bloom Filter&#xff09;是 1970 年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。 它的优点是空间效率和查询时间都比一般的算法要好的多&#xff…

AJAX实现搜索联想 自动补全

分析: 1.想实现联想搜索需要数据库的数据支撑,需要进行模糊查询,搜索出所有包含用户输入的关键字信息,并将这些信息都反馈到前端,简化用户输入,从而提高用户的体验。 2.为了提高用户的使用体验&#xff0c;整个页面不能全部刷新&#xff0c;需要局部刷新&#xff0c;为此需要…

Python中的各种报错-一般错误

目录 ValueError: check_hostname requires server_hostname missing 1 required positional argument: self xxx is not a package libpng warning: iCCP: cHRM chunk does not match sRGB check_hostname requires server_hostname python 安装第三方库&#xff0c;超时…

MQTTC数据桥接上云

[小 迪 导 读]&#xff1a;在工业物联网蓬勃发展的背景下&#xff0c;私有化部署已经不能满足当前的发展趋势了&#xff0c;因此dgiot在原有基础上进行创新&#xff0c;将私有化部署的区域数控一体机上的数据通过mqtt桥接的方式上传到云服务器上&#xff0c;完成数据的实时同步…