HTTPS 通俗简介

为什么需要HTTPS

9个问题搞懂 https

来源  

HTTP是明文传输的,也就意味着,介于发送端、接收端中间的任意节点都可以知道你们传输的内容是什么。这些节点可能是路由器代理 等。

举个最常见的例子,用户登陆。用户输入账号,密码,采用HTTP的话,只要在代理服务器上做点手脚就可以拿到你的密码了。

用户登陆 --> 代理服务器(做手脚)--> 实际授权服务器

在发送端对密码进行加密?没用的,虽然别人不知道你原始密码是多少,但能够拿到加密后的账号密码,照样能登陆。

 

HTTPS是如何保障安全的

 

HTTPS其实就是secure http的意思啦,也就是HTTP的安全升级版。

稍微了解网络基础的同学都知道,HTTP是应用层协议,位于HTTP协议之下是传输协议TCP。

TCP负责传输,HTTP则定义了数据如何进行包装。

 

HTTP --> TCP (明文传输)

 

HTTPS相对于HTTP有哪些不同呢?

 

其实就是在HTTP跟TCP中间加多了一层加密层TLS/SSL

 

神马是TLS/SSL?

 

通俗的讲,TLS、SSL其实是类似的东西,SSL是个加密套件,负责对HTTP的数据进行加密。

TLS是SSL的升级版。现在提到HTTPS,加密套件基本指的是TLS

 

传输加密的流程

原先是应用层将数据直接给到TCP进行传输,现在改成应用层将数据给到TLS/SSL,将数据加密后,再给到TCP进行传输。

大致如图所示。

就是这么回事。将数据加密后再传输,而不是任由数据在复杂而又充满危险的网络上明文裸奔,在很大程度上确保了数据的安全。

这样的话,即使数据被中间节点截获,坏人也看不懂

 

H

 

TTPS是如何加密数据的

 

对安全或密码学基础有了解的同学,应该知道常见的加密手段。

一般来说,加密分为对称加密、非对称加密(也叫公开密钥加密)。

 

对称加密

 

对称加密的意思就是,加密数据用的密钥,跟解密数据用的密钥一样的。

对称加密的优点在于加密、解密效率通常比较高。缺点在于,数据发送方、数据接收方需要协商、共享同一把密钥,并确保密钥不泄露给其他人。

此外,对于多个有数据交换需求的个体,两两之间需要分配并维护一把密钥,这个带来的成本基本是不可接受的。

 

非对称加密

 

非对称加密的意思就是,加密数据用的密钥(公钥),跟解密数据用的密钥(私钥)是不一样的。

什么叫做公钥呢?其实就是字面上的意思——公开的密钥,谁都可以查到。因此非对称加密也叫做公开密钥加密。

相对应的,私钥就是非公开的密钥,一般是由网站的管理员持有

 

公钥、私钥两个有什么联系呢?

 

简单的说就是,通过公钥加密的数据,只能通过私钥解开。通过私钥加密的数据,只能通过公钥解开。

很多同学都知道用私钥能解开公钥加密的数据,但忽略了一点,私钥加密的数据,同样可以用公钥解密出来

而这点对于理解HTTPS的整套加密、授权体系非常关键。

 

举个非对称加密的例子

  • 登陆用户:小明

  • 授权网站:某知名社交网站(以下简称XX)

小明都是某知名社交网站XX的用户,XX出于安全考虑在登陆的地方用了非对称加密。

小明在登陆界面敲入账号、密码,点击“登陆”。

 

于是,浏览器利用公钥对小明的账号密码进行了加密,并向XX发送登陆请求。

XX的登陆授权程序通过私钥,将账号、密码解密,并验证通过。之后,将小明的个人信息(含隐私),

通过私钥加密后,传输回浏览器。浏览器通过公钥解密数据,并展示给小明。

 

  • 步骤一: 小明输入账号密码 --> 浏览器用公钥加密 --> 请求发送给XX

  • 步骤二: XX用私钥解密,验证通过 -->

  • 步骤三: 获取小明社交数据,用私钥加密 --> 浏览器用公钥解密数据,并展示。

用非对称加密,就能解决数据传输安全的问题了吗?

前面特意强调了一下,私钥加密的数据,公钥是可以解开的,而公钥又是加密的。

也就是说,非对称加密只能保证单向数据传输的安全性。

 

此外,还有公钥如何分发/获取的问题。下面会对这两个问题进行进一步的探讨。

 

公开密钥加密:两个明显的问题

前面举了小明登陆社交网站XX的例子,并提到,单纯使用公开密钥加密存在两个比较明显的问题。

  1. 公钥如何获取

  2. 数据传输仅单向安全

 

问题一:公钥如何获取

浏览器是怎么获得XX的公钥的?当然,小明可以自己去网上查,XX也可以将公钥贴在自己的主页。

然而,对于一个动不动就成败上千万的社交网站来说,会给用户造成极大的不便利,

毕竟大部分用户都不知道“公钥”是什么东西。

 

问题二:数据传输仅单向安全

前面提到,公钥加密的数据,只有私钥能解开,于是小明的账号、密码是安全了,半路不怕被拦截。

然后有个很大的问题:私钥加密的数据,公钥也能解开。加上公钥是公开的,小明的隐私数据相当于在网上换了种方式裸奔。

(中间代理服务器拿到了公钥后,毫不犹豫的就可以解密小明的数据)

 

下面就分别针对这两个问题进行解答。

 

问题一:公钥如何获取

这里要涉及两个非常重要的概念:证书、CA(证书颁发机构)。

证书

可以暂时把它理解为网站的身份证。这个身份证里包含了很多信息,其中就包含了上面提到的公钥。

也就是说,当小明、小王、小光等用户访问XX的时候,再也不用满世界的找XX的公钥了。

当他们访问XX的时候,XX就会把证书发给浏览器,告诉他们说,乖,用这个里面的公钥加密数据。

 

这里有个问题,所谓的“证书”是哪来的?这就是下面要提到的CA负责的活了。

 

CA(证书颁发机构)

 

强调两点:

  1. 可以颁发证书的CA有很多(国内外都有)。

  2. 只有少数CA被认为是权威、公正的,这些CA颁发的证书,浏览器才认为是信得过的。比如VeriSign。(CA自己伪造证书的事情也不是没发生过。。。)

证书颁发的细节这里先不展开,可以先简单理解为,网站向CA提交了申请,CA审核通过后,将证书颁发给网站,用户访问网站的时候,网站将证书给到用户。

至于证书的细节,同样在后面讲到。

 

问题二:数据传输仅单向安全

 

上面提到,通过私钥加密的数据,可以用公钥解密还原。

那么,这是不是就意味着,网站传给用户的数据是不安全的?

答案是:是!!!(三个叹号表示强调的三次方)

 

看到这里,可能你心里会有这样想:用了HTTPS,数据还是裸奔,这么不靠谱,还不如直接用HTTP来的省事。

但是,为什么业界对网站HTTPS化的呼声越来越高呢?这明显跟我们的感性认识相违背啊。

因为:HTTPS虽然用到了公开密钥加密,但同时也结合了其他手段,如对称加密,来确保授权、加密传输的效率、安全性。

 

概括来说,整个简化的加密通信的流程就是:

  1. 小明访问XX,XX将自己的证书给到小明(其实是给到浏览器,小明不会有感知)

  2. 浏览器从证书中拿到XX的公钥A

  3. 浏览器生成一个只有自己知道的对称密钥B,用公钥A加密,并传给XX(其实是有协商的过程,这里为了便于理解先简化)

  4. XX通过私钥解密,拿到对称密钥B

  5. 浏览器、XX 之后的数据通信,都用密钥B进行加密

  6.  这么说最后还是用对称加密, 好像不对吧?

注意:对于每个访问XX的用户,生成的对称密钥B理论上来说都是不一样的。

比如小明、小王、小光,可能生成的就是B1、B2、B3.

参考下图:(附上原图出处)

 

证书可能存在哪些问题

 

了解了HTTPS加密通信的流程后,对于数据裸奔的疑虑应该基本打消了。

然而,细心的观众可能又有疑问了:怎么样确保证书有合法有效的?

 

证书非法可能有两种情况:

  1. 证书是伪造的:压根不是CA颁发的

  2. 证书被篡改过:比如将XX网站的公钥给替换了

举个例子:

我们知道,这个世界上存在一种东西叫做代理,于是,上面小明登陆XX网站有可能是这样的,

小明的登陆请求先到了代理服务器,代理服务器再将请求转发到的授权服务器。

小明 --> 邪恶的代理服务器 --> 登陆授权服务器

小明 <-- 邪恶的代理服务器 <-- 登陆授权服务器

 

然后,这个世界坏人太多了,某一天,代理服务器动了坏心思(也有可能是被入侵),

将小明的请求拦截了。同时,返回了一个非法的证书。

 

小明 --> 邪恶的代理服务器 --x--> 登陆授权服务器

小明 <-- 邪恶的代理服务器 --x--> 登陆授权服务器

如果善良的小明相信了这个证书,那他就再次裸奔了。当然不能这样,那么,是通过什么机制来防止这种事情的放生的呢。

下面,我们先来看看”证书”有哪些内容,然后就可以大致猜到是如何进行预防的了。

 

证书简介

在正式介绍证书的格式前,先插播个小广告,科普下数字签名和摘要,然后再对证书进行非深入的介绍。

为什么呢?

 

因为数字签名、摘要是证书防伪非常关键的武器。

 

数字签名与摘要

简单的来说,“摘要”就是对传输的内容,通过hash算法计算出一段固定长度的串(是不是联想到了文章摘要)。

然后,在通过CA的私钥对这段摘要进行加密,加密后得到的结果就是“数字签名”。(这里提到CA的私钥,后面再进行介绍)

 

明文 --> hash运算 --> 摘要 --> 私钥加密 --> 数字签名

 

结合上面内容,我们知道,这段数字签名只有CA的公钥才能够解密。

接下来,我们再来看看神秘的“证书”究竟包含了什么内容,然后就大致猜到是如何对非法证书进行预防的了。

数字签名、摘要进一步了解可参考 这篇文章。

证书格式

先无耻的贴上一大段内容,证书格式来自这篇不错的文章《OpenSSL 与 SSL 数字证书概念贴》

内容非常多,这里我们需要关注的有几个点:

 

  1. 证书包含了颁发证书的机构的名字 -- CA

  2. 证书内容本身的数字签名(用CA私钥加密)

  3. 证书持有者的公钥

  4. 证书签名用到的hash算法

此外,有一点需要补充下,就是:

  1. CA本身有自己的证书,江湖人称“根证书”。这个“根证书”是用来证明CA的身份的,本质是一份普通的数字证书。

  2. 浏览器通常会内置大多数主流权威CA的根证书。

证书格式

1. 证书版本号(Version)
版本号指明X.509证书的格式版本,现在的值可以为:1) 0: v1 2) 1: v2 3) 2: v3
也为将来的版本进行了预定义 2. 证书序列号(Serial Number) 序列号指定由CA分配给证书的唯一的"数字型标识符"。当证书被取消时,实际上是将此证书的序列号放入由CA签发的CRL中, 这也是序列号唯一的原因。 3. 签名算法标识符(Signature Algorithm) 签名算法标识用来指定由CA签发证书时所使用的"签名算法"。算法标识符用来指定CA签发证书时所使用的: 1) 公开密钥算法 2) hash算法 example: sha256WithRSAEncryption 须向国际知名标准组织(如ISO)注册 4. 签发机构名(Issuer) 此域用来标识签发证书的CA的X.500 DN(DN-Distinguished Name)名字。包括: 1) 国家(C) 2) 省市(ST) 3) 地区(L) 4) 组织机构(O) 5) 单位部门(OU) 6) 通用名(CN) 7) 邮箱地址 5. 有效期(Validity) 指定证书的有效期,包括: 1) 证书开始生效的日期时间 2) 证书失效的日期和时间 每次使用证书时,需要检查证书是否在有效期内。 6. 证书用户名(Subject) 指定证书持有者的X.500唯一名字。包括: 1) 国家(C) 2) 省市(ST) 3) 地区(L) 4) 组织机构(O) 5) 单位部门(OU) 6) 通用名(CN) 7) 邮箱地址 7. 证书持有者公开密钥信息(Subject Public Key Info) 证书持有者公开密钥信息域包含两个重要信息: 1) 证书持有者的公开密钥的值 2) 公开密钥使用的算法标识符。此标识符包含公开密钥算法和hash算法。 8. 扩展项(extension) X.509 V3证书是在v2的基础上一标准形式或普通形式增加了扩展项,以使证书能够附带额外信息。标准扩展是指 由X.509 V3版本定义的对V2版本增加的具有广泛应用前景的扩展项,任何人都可以向一些权威机构,如ISO,来 注册一些其他扩展,如果这些扩展项应用广泛,也许以后会成为标准扩展项。 9. 签发者唯一标识符(Issuer Unique Identifier) 签发者唯一标识符在第2版加入证书定义中。此域用在当同一个X.500名字用于多个认证机构时,用一比特字符串 来唯一标识签发者的X.500名字。可选。 10. 证书持有者唯一标识符(Subject Unique Identifier) 持有证书者唯一标识符在第2版的标准中加入X.509证书定义。此域用在当同一个X.500名字用于多个证书持有者时, 用一比特字符串来唯一标识证书持有者的X.500名字。可选。 11. 签名算法(Signature Algorithm) 证书签发机构对证书上述内容的签名算法 example: sha256WithRSAEncryption 12. 签名值(Issuer's Signature) 证书签发机构对证书上述内容的签名值



如何辨别非法证书

上面提到,XX证书包含了如下内容:

  1. 证书包含了颁发证书的机构的名字 -- CA

  2. 证书内容本身的数字签名(用CA私钥加密)

  3. 证书持有者的公钥

  4. 证书签名用到的hash算法

浏览器内置的CA的根证书包含了如下关键内容:

  1. CA的公钥(非常重要!!!)

好了,接下来针对之前提到的两种非法证书的场景,讲解下怎么识别

完全伪造的证书

这种情况比较简单,对证书进行检查:

  1. 证书颁发的机构是伪造的:浏览器不认识,直接认为是危险证书

  2. 证书颁发的机构是确实存在的,于是根据CA名,找到对应内置的CA根证书、CA的公钥。

  3. 用CA的公钥,对伪造的证书的摘要进行解密,发现解不了。认为是危险证书

篡改过的证书

假设代理通过某种途径,拿到XX的证书,然后将证书的公钥偷偷修改成自己的,然后喜滋滋的认为用户要上钩了。然而太单纯了:

  1. 检查证书,根据CA名,找到对应的CA根证书,以及CA的公钥。

  2. 用CA的公钥,对证书的数字签名进行解密,得到对应的证书摘要AA

  3. 根据证书签名使用的hash算法,计算出当前证书的摘要BB

  4. 对比AA跟BB,发现不一致--> 判定是危险证书

HTTPS握手流程

上面啰啰嗦嗦讲了一大通,HTTPS如何确保数据加密传输的安全的机制基本都覆盖到了,太过技术细节的就直接跳过了。

最后还有最后两个问题:

  1. 网站是怎么把证书给到用户(浏览器)的

  2. 上面提到的对称密钥是怎么协商出来的

上面两个问题,其实就是HTTPS握手阶段要干的事情。HTTPS的数据传输流程整体上跟HTTP是类似的,同样包含两个阶段:握手、数据传输。

  1. 握手:证书下发,密钥协商(这个阶段都是明文的)

  2. 数据传输:这个阶段才是加密的,用的就是握手阶段协商出来的对称密钥

阮老师的文章写的非常不错,通俗易懂,感兴趣的同学可以看下。

附:《SSL/TLS协议运行机制的概述》:http://www.ruanyifeng.com/blo...

转载于:https://www.cnblogs.com/dhsz/p/7680530.html

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

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

相关文章

CSS Modules入门教程

为什么引入CSS Modules 或者可以这么说&#xff0c;CSS Modules为我们解决了什么痛点。针对以往我写网页样式的经验&#xff0c;具体来说可以归纳为以下几点&#xff1a; 全局样式冲突 过程是这样的&#xff1a;你现在有两个模块&#xff0c;分别为A、B,你可能会单独针对这两…

热电偶校验仪_热电偶校验方法_热电偶的使用方法及维修经验

一、遵照仪表接线图进行准确接线通电后&#xff0c;仪表先是显示仪表的热电偶分度号&#xff0c;接着显示仪表量程范围&#xff0c;再测仪表显示设定温度&#xff0c;数显仪表显示测量温度。若仪表数码管显示不是发热体的温度&#xff0c;而显示“OVER”、“0000”或“000”等状…

Java 7:满足Fork / Join框架

JSR-166&#xff08;y&#xff09;是Java 7中包含的此新功能的正式名称。如果您发现名称中有一个“ y”&#xff0c;这是因为自Java 5起就添加了JSR-166&#xff08;并发实用程序&#xff09; &#xff0c;但它不会就此停止&#xff0c;因为已经有计划在JSR-166&#xff08;e&a…

css3总结之居中

居中在前端布局上很常见&#xff0c;也很常用&#xff0c;也是最基本的技巧。居中效果在方向控制上基本可以分解成水平居中&#xff0c;垂直居中和水平垂直居中。 针对调整的元素不同&#xff0c;具体的处理方式上有些差异。这里我们先不讲绝对定位下的居中&#xff0c;绝对定位…

福州java培训哪里好_南通java培训哪家好

渡课IT教育成立于2006年&#xff0c;14年来&#xff0c;我们累计输送学员达 6000 &#xff0c;其中南通地区输送50%&#xff0c;上海 40%&#xff0c;其他地区 10%&#xff0c;学员1年后的平均薪水达 9860 元&#xff1b;受到1000用人单位的赞誉与支持。Java开发的需求量在北上…

研究僵局–第2部分

调查死锁时最重要的要求之一就是要研究死锁。 在我的上一个博客中&#xff0c;我编写了一个名为DeadlockDemo代码&#xff0c;该代码使用一堆线程在一系列银行帐户之间转移随机数&#xff0c;然后陷入僵局。 该博客运行该代码以演示获取线程转储的几种方法。 线程转储只是一个…

连锁便利店管理系统有什么用

连锁便利店管理系统对于连锁便利店的运营和管理非常有用。以下是一些常见的用途&#xff1a; 1. 库存管理&#xff1a;连锁便利店通常需要管理多个门店的库存&#xff0c;管理系统可以帮助实时掌握各个门店的库存情况&#xff0c;包括商品数量、进货记录、库存调拨等。这样可以…

浏览器打印设置横向打印_爱普生打印机无线连接设置

1、首先&#xff0c;把epsonl385打印机插上电源通电&#xff0c;待自检完成后&#xff0c;便可以设置。如果用户家里的无线路由器带有WPS(Wi-Fi Protected Setup)或QSS(又称快速安全设置)功能&#xff0c;那就简单多了。2、通过WPS或QSS无线路由器按钮连接&#xff0c;给无线路…

linux python定时任务调度,Python下定时任务框架APScheduler的使用

1.APScheduler简介&#xff1a;APScheduler是Python的一个定时任务框架&#xff0c;可以很方便的满足用户定时执行或者周期执行任务的需求&#xff0c;它提供了基于日期date、固定时间间隔interval 、以及类似于Linux上的定时任务crontab类型的定时任务。并且该框架不仅可以添加…

研究僵局–第1部分

我敢肯定我们都去过那里&#xff1a;太晚了&#xff0c;您饿了&#xff0c;服务器已挂起&#xff0c;或者应用程序正在以蜗牛的速度运行&#xff0c;并且有人喘着气想要您解决问题&#xff0c;然后再去解决。 您的应用程序意外挂起的可能原因之一是称为死锁的线程问题。 无需赘…

使用Vue.js和Axios从第三方API获取数据 — SitePoint

更多的往往不是&#xff0c;建立你的JavaScript应用程序时&#xff0c;你会想把数据从远程源或消耗一个[ API ]&#xff08;https&#xff1a;/ /恩。维基百科。org /维基/ application_programming_interface&#xff09;。我最近看了一些[公开]&#xff08;https://github.co…

区位码怎么知道点阵里的起始点_自身免疫疾病的GAPS起始饮食改良版

写这篇文章的原因如果您已经关注我的博客一段时间&#xff0c;您知道我开始使用GAPS饮食&#xff0c;然后转换到AIP饮食&#xff0c;因为我仍在努力治疗炎症和自身免疫的发作。 Katy Haldiman 有同样的经历&#xff0c;我们并不孤单。许多患有自身免疫性疾病的人在 GAPS 上挣扎…

微信小程序APP(商超营销类)经验总结

项目介绍 这是一款主打门店营销的小程序。包括首页、门店、营销、个人设置、登录、数据统计展示、营销设置等。 本来要独立完成整个项目&#xff0c;包括前后端一套的&#xff0c;有些意外因素&#xff0c;项目临时收尾&#xff08;说明&#xff1a;只完成了前端的部分&#…

excel不显示0_Excel数字过长不能完整显示?超长数字变为0

Excel中计算规则和限制设定数值精确度为15位&#xff01;超过15位后&#xff0c;数字会显示为0excel数字超过15位&#xff0c;会显示为0&#xff0c;超过10位&#xff0c;默认采用科学计数法显示1、如何解决超长数字输入&#xff0c;全部显示问题&#xff1f;&#xff08;单元格…

Android天气预报设计

——嵌入式软件开发 名字功能模块代码行数备注谢灿辉Widget200桌面小程序李杨敏GPS定位&#xff0c;百度地图API100-150获取当前所在城市丁小芳城市选择Activity&#xff0c;天气API获取天气100-200包括数据库交互本软件是一个天气类应用软件&#xff0c;带有widget&#xff0c…

算法笔记_164:算法提高 最小方差生成树(Java)

目录 1 问题描述 2 解决方案 1 问题描述 问题描述给定带权无向图&#xff0c;求出一颗方差最小的生成树。输入格式输入多组测试数据。第一行为N,M&#xff0c;依次是点数和边数。接下来M行&#xff0c;每行三个整数U,V,W&#xff0c;代表连接U,V的边&#xff0c;和权值W。保证图…

layui数据表格(一:基础篇,数据展示、分页组件、表格内嵌表单和图片)

表格展示神器之一&#xff1a;layui表格 前言&#xff1a;在写后台管理系统中使用最多的就是表格数据展示了&#xff0c;使用表格组件能提高大量的开发效率&#xff0c;目前主流的数据表格组件有bootstrap table、layui table、easyUI table等.... 博主个人比较倾向于layui&am…

算法设计与分析_算法设计与分析(第2版)第2章分治策略回顾

YI时间&#xff5c;外刊&#xff5c;MM-DFW&#xff5c;机器学习系列点击上方蓝字&#xff0c;关注给你写干货的松子茶分治策略是通用算法设计技术之一&#xff0c;很多有效的算法是它的特殊实现,顾名思义就是分而治之。一个问题能够用分治法求解的要素是问题能够按照某种方式分…

2017-2018-1 Java演绎法 第三周 作业

团队任务&#xff1a;团队展示与选题团队展示 队员学号及姓名 学号  姓名  主要负责工作  20162315  马军  日常统计&#xff0c;项目部分代码  20162316  刘诚昊  项目部分代码&#xff0c;代码质量测试  20162317  袁逸灏  组长 项目 主要 代码  201…

linux开机启动roscore,树莓派ubuntuMate系统中开机自启动ROS的launch文件

0x00 为何需要开机自启动launch文件在ROS开发后期阶段由于功能已经趋于稳定&#xff0c;因此就需要系统在一上电启动后就自动把ROS下的各节点程序加载运行&#xff0c;这样就省去了我们还得手动输入roslaunch命令来加载bringup的launch文件的操作。经过我的实际测试目前有两种方…