HTTPS再发一弹,不要再说不会了

在下面的章节,我们要搞明白以下几个问题:

HTTP是什么:

首先,我们知道HTTP的全名是超文本传输协议,主要是用来供客户端(一般为浏览器)与服务器之间传递WEB数据的一种应用层协议。

而原始的HTTP协议只规定了传输数据包的格式以及互相之间协商好的字段,这些格式和字段是客户端与服务器都能理解的内容。

但是HTTP协议的整个应用层数据包(TCP报文的payload),所有的内容都是明文的。

也就是说,当我们从传输路径中某个位置使用抓包工具或其他手段截取到这个数据包,就能轻松的获取其中的请求和响应内容。

举个例子:

A和B用一种语言对话(例如中文),当黑客C使用手段截取的A和B的谈话内容,他只需要自己会中文或找个会中文的人进行翻译就知道A和B的谈话内容了。

HTTPS是什么:

我们了解了HTTP大概的工作原理,就知道HTTP仅仅实现了一种数据通讯的协议,但是是并不安全的。

而如何让客户端和服务器之间的数据交换变得安全,那么就需要有以下两个措施:

1.传输的数据内容是加密的而非明文的

2.浏览器在访问服务器的时候,能够验证服务器的身份(即我当前访问的服务器就是我想要访问的服务器,而非假冒的),避免中间人攻击(黑客在中间假冒客户端和服务器,两边进行欺骗)

当解决了以上两个问题,那么HTTP就变成了一个安全的传输协议,即我们要学习的HTTPS协议。

A找到B的时候,要求B出示一个证明身份的证件(例如身份证),确认了B的身份后。采用一种黑客无法截取的方式(具体方式在后面详细解释)商议了一个密码本,用来加密要交流的内容。这时A和B的交流内容都通过密码本加密,C截取到也无法解密。

HTTP和HTTPS的区别:

概念:采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。

使用一个公式来描述:

data为我们想要加密的内容,key就是对称加密使用的单秘钥,X为加密后的内容。f为加密,g为解密。

常见的对称加密算法有DES、3DES、AES等,目前用得比较多的是AES加密。

概念:非对称加密算法需要两个密钥来进行加密和解密,这两个密钥是公开密钥(publickey,简称公钥)和私有密钥(privatekey,简称私钥)。

A-->B方向:加密:f(pk,data)=X解密:g(sk,X)=dataB-->A方向:加密:f(sk,data)=Y解密:g(pk,Y)=data假设A是客户端,B是服务器。

当A向B发数据时,A使用公钥(pk)加密,得到加密后的数据X。

B收到X后,使用私钥(sk)解密。

当B向A发数据时,B使用私钥(sk)加密,得到加密后的数据Y。

A收到Y后,使用公钥(pk)解密。

注意:所有能够与B服务器交换数据的客户端都可以持有公钥,而服务器持有私钥(只有服务端B有私钥)。可以参考SSH协议中的私钥和公钥。

常见的非对称加密算法有:RSA、DSA、ECDSA等。

概念:HASH散列是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

hash散列有什么作用?

我们一般使用哈希值来比较一个文件或一段内容是否被篡改。例如在我们使用迅雷或其他下载工具下载了一个软件,我们想验证是否下载完整则可以使用它的散列值进行比对,如果一致则下载完整,如果不一致则内容有问题。

常用的Hash散列算法有:MD4、MD5、SHA1、SHA-256等。

我们在HTTP的基础上让客户端(浏览器)和服务器只使用对称加密,如下图所示:

从图中可以看出,客户端和服务器之间如果只使用对称加密技术,则始终需要商议一个加密用的秘钥(key,例如一个随机字符串)。在这个商议的过程中,黑客就可以介入进行截取,只要黑客获取到这个key,那么后面的对称加密就完全失效了。

在HTTP上只使用非对称加密的技术,如下图所示:

可以看到,黑客可以截取到公钥以及之后传输的数据,并可以解密服务器发给客户端的数据,同样存在数据安全的问题。(这里只讨论数据加密的安全问题,中间人攻击在后面讨论)

既然只使用对称加密和只使用非对称加密都无法避免数据被黑客截取,那么我们可以将对称加密和非对称加密结合起来使用,如下图:

从图中可以看到,我们使用非对称加密算法来协商对称加密的秘钥key。客户端拿到服务器的公钥后,产生一个随机的key,然后使用公钥对其进行加密,并发送给服务器。

由于公钥加密的内容只有私钥才能解密,也就是说黑客即便截取到了公钥,也无法获取到key。

所以之后的数据使用key进行对称加密是绝对安全的。

从以上过程我们可以看到,使用对称加密非对称加密的方式可以使黑客无法通过截取的方式来获取数据,看似已经很安全了,但是我们还要讨论一种情况,就是中间人欺骗攻击。

在第4节的基础上,可能出现以下情况,如图:

黑客在中间充当一个中间人,让客户端以为自己是服务器,让服务器以为自己是客户端。

他使用一套假的非对称加密秘钥来与客户端进行通讯,而使用服务器给的真的公钥与服务器进行通讯,从中将数据解密并重新加密,起到两边欺骗的效果。

那么,如何防范这种中间人欺骗的攻击呢?

那就需要服务器能够证明自己的身份。客户端从服务器拿到公钥的同时,还要能够确定当前通讯的服务器的身份是正确的(从而才能确保拿到的公钥是正确的,使用该公钥加密,只有正确的服务器才能解密)。

为了避免中间人欺骗攻击,需要服务器能够向客户端(浏览器)证明自己的身份。那么如何证明呢?

举个例子,我们去坐飞机、坐火车,在进站的时候需要出示自己的身份证来证明自己的身份。而这个身份证不是随便谁都可以颁发的,而是需要一个权威的机构来颁发,身份证就是我们国家的公安机关来颁发的,并且具有一定的防伪措施(暂时理解为绝对可靠的)。

那么,服务器的身份证是什么呢?答案就是我们下面要讨论的CA证书,而CA证书的颁发机构就相当于公安机关,他是一个互联网行业认可的一些机构(有多家)。下面我们就来了解一下CA证书以及CA机构。

CA机构可以对其他公司(服务器所属公司)和提供的web服务(服务器)进行证书签发。而为这些服务器颁发证书需要有一个根证书。

根证书:

概念:根证书是未被签名的公钥证书或自签名的证书。

这个证书中包含CA机构的一个公钥(CPK),还有CA机构的一些明文信息。对应的私钥由CA机构自己妥善保存,用于为其他公司提供的web服务器签发证书时加密签名使用。

当我们认可一个CA机构时,就需要在浏览器中下载安装该机构的根证书,一般浏览器会内置他所信任的CA机构根证书(所以一般不会手动去安装)。

也就是说,我们的浏览器(客户端)中已经有CA机构的根证书了(这个很重要,后面会使用到它),CA机构自己保留着CSK(私钥)。

当一个公司想提供一个HTTPS的服务器,则需要在互联网认可的几家CA认证机构中选择一家来申请CA证书。

首先,我们看一下CA证书的结构(以百度为例):

CA机构收到申请后,大概执行以下操作:

1)对该公司以及服务进行核实,确认是否满足申请条件

2)将公钥和所有其他明文信息使用HASH算法(例如MD5算法)进行散列,得到一个散列值(也叫信息摘要),这个散列值主要用于以后判断信息是否被篡改(例如公钥被篡改,则散列值会改变)

3)将生产的散列值,使用CA机构的私钥进行加密(CSK私钥),得到一个数字签名

4)将百度提供的公钥、信息、数字签名形成一个CA证书,颁发给百度,放到服务器中

此时,浏览器在与服务器建立HTTPS连接的时候,服务器会将CA证书发送给浏览器。

浏览器拿到这个CA证书后,会做如下操作:

1)先查看CA证书中关于CA机构的信息,然后从浏览器安装的根证书中找到对应的CPK(如果没有,则提示证书有问题)

2)使用CPK对数字签名进行解密,得到HASH散列值(摘要)

3)使用与CA机构相同的HASH算法(例如MD5)对CA证书中的PK和明文信息进行HASH散列,得到自己算出来的散列值

4)对比解密得到的散列值与自己计算出来的散列值是否相同,如果相同则认为CA证书没有被篡改过,如果不相同,则提示证书有问题

5)在CA证书无误的情况下,证书中的PK(即百度的公钥)也是合法可用的,后面就可以使用这个公钥来加密key了(对称加密的秘钥,或秘钥的一部分)

这里其实已经回答了如何避免中间人欺骗攻击这个问题了:

因为如果中间人修改了CA证书中的PK或其他任何信息,那么客户端计算出的HASH值一定和解密出来的HASH值不一样(或无法解密)。

既然已经搞清楚了CA机构、CA证书、对称加密、非对称加密、HASH散列,那么我们将其流程窜起来就是HTTPS的工作流程了,如图:

流程解析,前提是已经建立了TCP连接:

1)客户端向服务器发送ClientHello,其中包含一个随机数1(Random1),还有客户端支持的加密方式(一个列表),如下所示:

2)服务器返回ServerHello,包含random2随机数,和选定的加密方式,如下所示:

3)服务器发送CA证书给客户端,如下所示:

4)验证证书合法性,即解密数字签名,计算HASH值,然后进行对比

5)验证通过后,客户端生成一个random3随机数,并连同random1和random2(之前通讯时发送给服务器的random1,以及服务器发送给客户端的random2),计算出一个key值(就是后面进行对称加密用的key)。

6)使用CA证书中的PK,对random3进行加密(key的一部分,并非key本身,因为黑客也可能拿到证书中的PK),并发送给服务器。

7)服务器收到加密后的random3,使用SK(证书中公钥PK对应的私钥,在百度服务器上保存着)解密,得到random3。

8)同样使用random1、random2和random3计算一个key值,计算方式是大家协商好的,所以计算出的key值和客户端计算出的key值应该是一样的。这个key就是对称加密使用的秘钥。

9)客户端通过key对数据进行加密,发送给服务器,服务器使用key解密数据。

10)服务器通过key对数据进行加密,发送给客户端,客户端使用key解密数据。

至此,整个HTTPS的大体流程就完成了,本文并未对特别细节的地方做描述,只是希望能够将自己的理解形成通俗易懂的文字,供大家参考。明白了工作原理,要研究细节部分就很容易了。

THE END
1.零知识证明基础:数字签名数字签名过程网络中的验证者使用发送者的公钥来验证数字签名。如果签名验证通过,这意味着交易确实来自声称的发送者并且没有被篡改。 另外,验证者还会检查发送者是否拥有足够的资金来完成交易。 区块的创建: 一旦交易被验证,它会被放入待打包的交易池。 矿工或验证者将这些交易打包成一个新的区块。 https://blog.csdn.net/zr2006_7/article/details/139996717
2.数字签名的使用(3)签名的复制:一个手写签名不容易被复制,因为复制品通常比较容易被鉴别来:而数字签名很容易被复制,因为一个文件的数字签名的复制品和原文件是一样的:所以要使用数字时问戳等特殊的技术避免数字签名的重复使用。 (4)手书签名是模拟的,且因人而异。数字签名是0和1的数字串,因人和消息而异。 https://www.ruiwen.com/wenxue/gexingqianming/411821.html
3.什么是数字签名?MicrosoftLearn在 2007 Microsoft Office system 应用程序内显示的证书任务窗格中,可以轻易地查看有关有问题证书的信息。2007 Office system应用程序允许您向同一文档中添加多个数字签名。 企业环境中的数字签名 以下情况说明了如何可以在企业环境中使用文档的数字签名: 员工使用 Office Excel 2007 来创建报销单。然后员工会创建三个https://docs.microsoft.com/zh-cn/previous-versions/office/office-2007-resource-kit/cc545901(v=office.12)
4.什么是数字签名如何制作数字签名web3.0对要签名的信息(例如文档或消息)进行哈希计算,生成一个哈希值,该哈希值是信息摘要的唯一表示。 使用私钥加密哈希值,生成数字签名。 3. 附加数字签名 将数字签名附加到要签名的信息中。 4. 验证数字签名 任何持有公钥的人都可以使用公钥解密数字签名。 https://m.php.cn/faq/843731.html
5.区块链探秘:从基础到深度,全面解读区块链技术与应用发送方可以使用接收方的公钥对数据进行加密,只有拥有对应私钥的接收方才能解密数据。 但是相对于对称加密,非对称加密的运算速度较慢,效率较低 常见的非对称加密算法:RSA、ECC 3.数字签名 数字签名是网络通信中,附加在原文信息上的一端额外的数据,是哈希函数和非对称加密的一种综合应用模式。 https://www.ctyun.cn/zhishi/p-410786
6.简答题简述数字签名的基本原理及过程。(8.0分)数字签名的主要目的是保证数据的完整性和真实性,一般包括两部分:签名算法和验证算法,通常由公钥密码算法和Hash算法结合实现。 假设发送方A要向接收方B发送一消息M,并对该消息进行数字签名,其具体的原理和过程如下: 1发送方A采用Hash算法生成要发送消息的摘要;然后用自己的私钥对摘要加密,实现签名,并将签名附加在消息https://easylearn.baidu.com/edu-page/tiangong/questiondetail?id=1810115261704185361&fr=search
7.关于区块链100个基础问题答疑18. 比特币地址如何生成? 比特币地址通过使用数字签名技术得到。首先随机选出256位二进制数字,形成私钥,由私钥生成公钥,然后通过加密函数来生成地址。这个生成方向是单向的。也就是你知道了地址是无法通过解密方法来计算出私钥的。 19. 什么是数字签名? https://www.jianshu.com/p/96d3cf8a0cc7
8.CA数字证书的驱动在哪里下载(CA数字证书签名流程)二、如何使用CA数字证书进行签名 1、先下载需要签名的PDF文件; 2、安装好驱动,再插入CA数字证书; 3、打开PDF文件在需要签名的地方签名; 4、法人、监事、股东等都要进行签名; 5、全部签完后提交等待工商局审核通过就能拿到营业执照。 三、CA数字签名注意事项 https://www.hcx123.com/news/sz/2079.html
9.中华人民共和国密码法–云南城市建设职业学院对称密码算法,即加、解密使用的密钥是相同或容易相互推导得出的,如同往一个上了锁的箱子里放物品,放入和取出物品时需要用同样的钥匙开锁。公钥密码算法,加密的时候用公开的密钥,解密的时候用只有自己知道的私钥,且从私钥可以推导出公钥,但从公钥不能推导出私钥,多用于身份认证、数字签名,可确保真实性和不可否认性。https://www.yncjxy.com/baoweichu/falufagui/20964/
10.数字证书签名到底是什么?这篇文章讲得太好了3. 数字证书(Certificate) 在HTTPS的传输过程中,有一个非常关键的角色--数字证书,那什么是数字证书?又有什么作用呢? 所谓数字证书,是一种用于电脑的身份识别机制。由数字证书颁发机构(CA)对使用私钥创建的签名请求文件做的签名(盖章),表示CA结构对证书持有者的认可。 https://www.51cto.com/article/628890.html
11.abbyyfinereaderpdf15中文破解版v15.0.114.4683查看和更新元数据并验证数字签名,以确保文档的真实性和完整性。 3、从任何类型的PDF中检索信息 通过使用全文关键字搜索和书签,即使在扫描的PDF中也可以快速轻松地查找信息。文档打开后,FineReader PDF会自动检测不可搜索的PDF文档,并立即应用OCR(光学字符识别)使其可供搜索。 4、编辑和更新PDF 添加以前版本的https://www.ddooo.com/softdown/153961.htm
12.2016年网络安全威胁的回顾与展望将APT概念泛化到一些使用高级手段和技巧的攻击行为,是不负责任的,没有攻击意图和攻击意志的APT分析,不是可靠的APT分析判定。而恰恰相反的是,高级的网络攻击未必使用高级的技巧和装备,APT攻击者劫持普通恶意代码,包括全面伪装成普通的黑产犯罪可能会成为一种趋势。 https://www.antiy.com/response/2016_Antiy_Annual_Security_Report.html
13.交通银行A. 我行努力采取各种符合业界标准的物理、电子和管理方面的安全措施来保护您的个人信息安全,如:SSL/应用层加密技术、HTTPS双向认证技术、数字签名等,以防止您的个人信息在收集、存储、传输等过程中遭到泄露、破坏。 B. 我行积极建立信息安全管理制度规范来管理规范个人信息的存储和使用,我行按照“授权人不参与操作,操http://www.bankcomm.com/BankCommSite/upload/infos/201802/07/2600434/statement/include/sryh/Android.html
14.在使用U盾进行交易时提示:“您的数字签名有错误”,是什么意思?遇此提示,一般是由于U盾硬件未正常连接、U盾驱动程序不正常或当页面提示“请选择用于签名的本人证书”时未选择或选择了错误的证书导致。您可通过证书驱动程序查看证书状态是否正常判断问题原因,然后分别采取重新连接U盾、重装U盾驱动程序及选择正确个人证书重新交易等解决方法进行解决。 此外,若您使用的是华虹二代U盾,此问https://wap.icbc.com.cn/icbc/grdzyx3/74.htm
15.小米系列深度刷机救砖通用教程(上)3.让系统进入测试模式跳过驱动数字签名(在Win10或网吧操作可忽略此项) 安装设备驱动有时会涉及到底层,为保护操作系统安全性,防止一些不明来历的驱动,对其进行破坏或植入恶意代码,引入了驱动数字签名的机制,通常只有被微软签名过的“安全”驱动才能被正常安装并使用,而miflash中的深度刷机驱动文件与FASTBOOT的不同,是没http://www.miui.com/thread-4324312-1-1.html