因为HTTP协议本身存在着明文传输、不能很好的验证通信方的身份和无法验证报文的完整性等一些安全方面的确点,所以才有了HTTPS的缺陷。HTTPS确切的的说不是一种协议,而是HTTP + SSL (TSL)的结合体。HTTP报文经过SSL层加密后交付给TCP层进行传输。SSL(安全套节层)主要采取的是RSA(非对称加密)与AES(对称加密)结合的加密方式。先通过RSA交互AES的密钥,然后通过AES进行报文加密和解密。本篇博客主要聊的就是HTTPS具体的工作过程。

一、RSA与AES简述

在本篇博客的第一部分呢,先聊一下RAS与AES这两个加密策略,如果你在公司做过支付相关的东西,对数据传输的安全性要求比较高,这时候就得采取一些加密措施将传输的报文进行加密,必要时再进行MD5验签。当然本部分聊的RAS与AES是比较简洁的,关于这两者具体的内容,请自行Google吧。因为HTTPS在传输的过程中使用到了RSA与AES加密算法,所以在聊HTTP+SSL之前呢,我们先简单的聊一下AES与RSA。

1、Advanced Encryption Standard (AES: 高级加密标准)

AES,全称:Advanced Encryption Standard----高级加密标准。该加密算法有一个密钥,该密钥可以用来加密,也可以用来解密,所以AES是对称加密算法。下方这个就是AES加密和解密的过程。Client端与Server端有一个共同的Key, 这个Key是用来加密和解密的。如果报文在传输的过程中被窃取了,没有这个key, 对加密的内容进行破解是非常困难的,当然窃取者如果有key的话,也是可以轻而易举的解密的。所以在AES中,key是关键。这也就相当于你们家的门钥匙,谁拿到钥匙后都可以打开你们家的门。即使门锁再结实,再安全,在钥匙面前也是不行呢。

所以对于AES加密策略来说这个Key的保密措施要做足一些,如果之后有时间的话可以分享一些具体的AES加密策略。比如每次加密的Key都是从一个密码本中动态生成的,而这个密码本服务端和客户端都有同一本,每次传输的是一些参数。这些参数在经过一些算法的映射,从密码本中取出相应的key用来解密。这样一来,就相当于给AES加了一层防盗门,加大了破解的难度。这样做的好处是每次加密的key都是不同的,而且需要密码本以及映射算法的支持。

2、RSA 公钥加密算法

RAS这个名字,就是该算法三位发明者的名字的首字母的组合。RAS是非对称加密,其在加密和解密的过程中,需要两个Key,一个公钥(public key),一个是私钥(private key)。公钥负责加密,而私钥负责解密。从名字就可以看出,公钥是可以开放出去的,任何人都可以持有公钥进行加密。而私钥必须得进行保护,因为是用来解密的。

这样一来,加密和解密就可以用不同的钥匙来处理。对于加密放来说,即使你可以对报文进行加密,如果没有私有的话也是不可以对你加密的内容进行解密的。这就相当于一个盒子,盒子上有把锁。你可以把东西放进去,然后再锁上盒子。但是如果你没有钥匙的话,也是打不开这把锁的。

下方这个简图就是服务端单向验证的RAS非对称加密算法,Client内置了一个公钥,该公钥与Server端的私钥是配对的,所以Client端可以使用这个内置的Public key加密,而服务端就可以使用这个private key进行解密。目前最常用的是服务端单向认证机制。

二、CA证书

如果你自己通过RAS算法生成了一个私钥和公钥,在公钥发送给客户端的过程中有可能被篡改成其他的公钥,而客户端在没有其他措施的保护下是不知道该公钥是否就是服务器那边的私钥对应的公钥的。这种自己做的RAS的公钥和私钥有可能在公钥分发的过程中被篡改。下方就是Client从Server端获取公钥时被中间者篡改了,将public换成了自己的伪public key, 同样这个中间者持有这个伪public key所对应的伪private key。如果客户端使用的伪public key进行加密传输的话,那么中间者是可以使用自己的private key进行解密的。

举个例子来类比一下这个问题。

假设你在古代,你出门在外,妻子在家养子。你们家有个箱子,箱子上有把锁,这就是你和你妻子互通的工具。你媳妇儿负责往箱子里放东西,然后上锁。你有把独特的钥匙,你负责开锁,取东西。可是你再将箱子给镖局托运的的过程中,被镖局的“小黑”掉包了,箱子的外表一致,锁看起来也一样,可是已经不是你的箱子了。因为路途遥远,古代又没有什么iPhone啥的,你媳妇没办法来辨别该箱子是否是原装的。然后就将一些东西放在了箱子里边,然后上锁交给了镖局的“小黑”。

因为“小黑”掉包的箱子,所以小黑有箱子的钥匙呢,然后就可以打开这个箱子,取东西了。原来的箱子又在小黑那,小黑就可以往原来的箱子里边随便往箱子放点没有价值的东西给你就行了。当你发现箱子里的东西不是你想要的时候,完了,小黑从镖局辞职了,找不到人了。找镖局的人讨说法,可是镖局的人说“小黑”是镖局的临时工,这个责任镖局说了,我们不能担。鉴于你无权无势,这事儿也就此罢了。(故事纯属虚构,如有雷同纯属巧合)

关于更多骗子的故事请移步网络剧《毛骗》一二三季。

为了防止“小黑”再次作案,所以颁布一个公正机构来证明你媳妇收到的箱子就是你发出的箱子。在RAS加密中也有一个第三方机构来充当这个角色,负责证明客户端收到的证书就是你发送的证书,中间没有被篡改。这个中间认证机构,就是数组证书认证机构, 其颁发的证书也就是我们常说的CA证书(CA , Certificate Authority)。

下面我们就来详细的叙述一下证书签名,证书分发以及证书验证的整个过程。

1、服务端人员使用RSA算法生成两个密钥,一个用来加密一个用来解密。将负责加密的那个密钥公布出去,所以我们称之为公钥(Public Key),而用来解密的那个密钥,不能对外公布,只有服务端持有,所以我们称之为私钥(Private Key)。服务端在将Public Key进行分发证书之前需要向CA机构申请给将要分发的公钥进行数字签名。(服务器公钥负责加密,服务器私钥负责解密)

2、生成数字签名公钥证书:对于CA机构来说,其也有两个密钥,我们暂且称之为CA私钥和CA公钥。CA机构将服务端的Public Key作为输入参数将其转换为一个特有的Hash值。然后使用CA私钥将这个Hash值进行加密处理,并与服务端的Public Key绑定在一起,生成数字签名证书。其实数字签名证书的本质就是服务端的公钥+CA私钥加密的Hash值。(CA私钥负责签名,CA公钥负责验证)

3、服务器获取到这个已经含有数字签名并带有公钥的证书,将该证书发送给客户端。当客户端收到该公钥数字证书后,会验证其有效性。大部分客户端都会预装CA机构的公钥,也就是CA公钥。客户端使用CA公钥对数字证书上的签名进行验证,这个验证的过程就是使用CA公钥对CA私钥加密的内容进行解密,将解密后的内容与服务端的Public Key所生成的Hash值进行匹配,如果匹配成功,则说明该证书就是相应的服务端发过来的。否则就是非法证书。

4、验证完服务端公钥的合法性后,就可以使用该公钥进行加密通信了。

             

下方这个截图就是苹果的根证书的一些信息,从下方可以看出,CA证书内容中包括加密算法,公共密钥以及数字签名。

下方就是公钥以及数字签名的具体内容,当对下方公共密钥进行验证时,需要使用内置的CA公钥将数字签名进行解密。然后将解密后的内容,与公钥生成的Hash值进行比较,如果匹配成功,那么该证书就是CA机构颁布的合法证书。

三、HTTPS安全通信机制的建立

上面我们聊完AES与RSA加密策略,然后又聊了带有数字签名的公共密钥。上面这两部分内容都是为HTTPS做铺垫的,接下来就看一看HTTP+SSL是如何进行数据传输的。

1、HTTPS简介

在开头的部分也说了,HTTPS不是一个新的通信协议,而是HTTP与SSL(或TSL)的组合。SSL--安全套节层(Secure Socket Layer), TSL(Transport Layer Security 安全传输层)是以SSL为原型开发的协议,IETF以SSL3.0为基准后又制定了TLS1.0、TLS1.1和TLS1.2,当前主流版本为SSL3.0与TLS1.0。

HTTPS就是在HTTP与TCP层中间添加了一个SSL层。因为HTTPS被HTTP多了这层加密的流程,所以HTTPS的速度要比HTTP慢的多。

2、HTTPS的通信过程

SSL的加密过程是RSA与AES混合进行的。简单概括一下,就是通过RSA加密方式来交换AES加解密的密钥,然后使用AES加密的方式来传输报文。下方是SSL建立连接以及传输数据的图解。在下图中大体可以分为四步:

第一步:有客户端发起的第一次握手,此次握手过程的主要目的是从服务端获取数字签名证书,服务端在发送数字签名证书之前要先确认客户端的SSL版本、加密算法等信息。

第二步:完成第一次握手后,接着进行第二次握手。第二次握手是在客户端收到证书后发起的,主要目的是将AES加解密使用的Key (Pre-master secret)发送给服务端。当然这个AES_KEY是使用第一次握手获取的公钥进行加密的。客户端收到这个使用公钥加密后的AES_KEY,使用服务端的私钥进行解密。这样客户端和服务端经过二次握手后都持有了AES加解密的KEY。

第三步:当Client与Server端都持有AES_KEY后,就可以对HTTP报文进行加解密了。

END: 最后就是断开连接了。具体如下图所示:

转载于:https://www.cnblogs.com/rinack/p/10743355.html

数字签名与HTTPS详解相关推荐

  1. TCP、IP协议族之数字签名与HTTPS详解

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 前面几篇博客聊了HTTP的相关东西,今天就来聊一聊HTTPS的东西.因为HTTP协议本身存在着明文 ...

  2. 公钥与私钥,HTTPS详解

    1.公钥与私钥原理 1)鲍勃有两把钥匙,一把是公钥,另一把是私钥 2)鲍勃把公钥送给他的朋友们----帕蒂.道格.苏珊----每人一把. 3)苏珊要给鲍勃写一封保密的信.她写完后用鲍勃的公钥加密,就可 ...

  3. https详解,ssl详解,学不会来打死我

    https详解,ssl详解,学不会来打死我 http 在了解https之前呢我们先来了解一下http. 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息.HTTP协议以明文方式发 ...

  4. Android 网络编程之HTTPS详解

    前言:HTTPS涉及相关的知识,总是很难的将其归纳总结起来,本文旨在带你学习详细的HTTPS相关知识点,看完本文后,你会了解到以下相关知识点: HTTPS的工作原理 HTTPS为什么要这样设计 密码学 ...

  5. HTTP和HTTPS详解

    转自:http://www.cnblogs.com/ok-lanyan/archive/2012/07/14/2591204.html HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式 ...

  6. HTTP HTTPS详解

    HTTP是应用层协议,用于客户端和服务端间的通信,来总结一下HTTP协议的具体内容以及细节. HTTP协议的请求和响应体解析 首先看一下HTTP请求的一个例子,用whistle抓包,打开"h ...

  7. HTTPS详解及HTTPS实验

    目录 HTTPS 一,https在参考模型中的位置 二,什么是HTTPS 三,什么是SSL 1,SSL 协议分为两层: 2,SSL 协议提供的服务: 四,HTTPS的加密方式 1,常见的加密算法 2, ...

  8. https详解+密钥交换算法+公钥与私钥

    1.https的简单介绍 https(超文本传输安全协议),它是一个安全通信通道,简单讲就是http的安全版.它使用安全套接字层(SSL)进行信息交换,在http下加入SSL层,https的安全基础是 ...

  9. 一、HTTPS详解SSL TLS

    一.什么是HTTPS HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安 ...

最新文章

  1. 科达正式发布PPP业务支持计划
  2. 微信小程序textArea组件字数限制
  3. 日常工作部门及体系相关单词
  4. Apache 配置虚拟目录、主机的疑惑及解决
  5. mysql sql 检测磁盘_MySQL 数据库磁盘占用情况查询
  6. MySQL的CRUD操作+使用视图
  7. 『Balancing Act 树的重心』
  8. linux安装telnet组件,LINUX下如何安装telnet
  9. 【华为OJ】按单词将句子逆序
  10. PHP漏洞全解(三)-客户端脚本植入
  11. jsf+EJB开发实例
  12. ADADELTA: AN ADAPTIVE LEARNING RATE METHOD
  13. youtube-dl 下载 playlist 命令
  14. Transformer课程 第8课NER案例代码笔记-IOB标记
  15. 双三次插值算法的OpenGL实现
  16. 特殊矩阵——对称矩阵(Symmetric Matrix)
  17. 秒杀tomcat优化
  18. 帝国列表页 pHP原代码页,帝国模板列表页和内容页的伪静态规则实现方法
  19. 牛客网第二次大回馈,关于第一次使用华为云服务器的小小看法
  20. 【Python学习】自定义对象转JSON

热门文章

  1. PyTorch Tutorial
  2. velocity模板的语法简要汇总
  3. 嵌入式和非嵌入式_我如何向非技术同事解释词嵌入
  4. 使用composer_在Google Cloud Composer(Airflow)上使用Selenium搜寻网页
  5. OVS VxLAN Flow 分析 - 每天5分钟玩转 OpenStack(149)
  6. 萨义德与巴伦博依姆关于音乐和文学的对话
  7. Activity和Service通信 Bind方式
  8. 关闭文件夹或打印机共享服务器,局域网共享打印机好用,但文件夹不能访问
  9. c html转为datatable,C#中DataTable导出为HTML格式的方法
  10. c语言的有趣小程序,一个有趣的小程序