1、HTTPS本身并非协议,而是标准的HTTP协议架在SSL/TLS协议之上的一种结构。(一种不太合适的说法可以认为是两种协议的叠加)。HTTP是工作在OSI7层模型的最上层,就是第7层:Application Layer。而SSL/TLS是工作在第4层:Transport Layer。两层之间还是隔了Presentation Layer(6层)和Session Layer(5层)两层的。

2、由于基于TCP/IP协议的通讯需要,HTTPS也还是必须暴露IP和Port出来,即这部分不在加密范畴之内。所以第三方还是可以通过截取网络包数据等手段,知道用户正在和哪个site通讯,当然,除了www.domain.com:port这部分数据之外,context后面的信息是加密的。

3、加密链接建立的核心基础是SSL/TLS的握手过程,这个过程要比TCP协议建立链接的3次握手过程复杂一些。参考了wikipedia中描述的过程http://en.wikipedia.org/wiki/Transport_Layer_Security,自己大概整理了一下这个握手过程,大概是下面这个样子的:

4、从上面的这个过程可以总结一下这个安全链接建立的过程:

client和server通讯为了保证安全性,所以通讯的消息得加密,即网络上密文传输。为了方便对方获得真实的消息,这个加密得使用对称加密算法。于是,这个加密的安全性就取决于密钥本身的强度以及所选用的对称加密算法了。

可是到底用什么密钥和对称加密算法呢?client和server互不认识,怎么会有默契上来就知道这两个东东都用啥?于是这事儿得client和server谈判!

 client给server发送了个ClientHello,里面包括:client能支持的TLS的最高版本、一个随机数A、client所能支持的加密算法集合、client所能支持的压缩算法集合。

server收到个ClientHello之后,拿出自己所能支持的TLS的最高版本跟client发过来的最高版本比较一下,这两个版本取个Max,这里标记为:max_TLS_version。server自己再生成个随机数B,从client传过来的加密算法集合中挑一个具体的加密算法M(注意,这里的M其实也是一个集合,包括:非对称加密算法用于加密上图的pre-master secret,比如RSA算法、对称加密算法用于数据传输时双方使用的加密自己的内容解密对方内容的依据、MAC算法用于校验信息是否被篡改、伪随机算法用于生成最终通讯时对称加密算法所需要的密钥master secret),从压缩算法集合中挑一个具体的压缩算法N。然后发送一个ServerHello作为回应给client,这个ServerHello就包括上面提到的max_TLS_version/B/M/N。

注意,这时client和server双方之间的信息基本比较对称了。因为双方已经协商好整个握手过程中所有可能需要涉及到的算法。

server发送自己经过第三方认证的证书给client,告诉他:哥是有证经营的,你可以拿我的证去随便调查。

client拿着server发过来的证书跑去权威的有关部门验证去了。。。(这两步涉及到的CA证书认证内容又很大,这里不展开描述,先将主要精力放在TLS握手上)

假设上面的证书验证通过了,这就意味着client相信server发过来的证书了,也就意味着client同意用server发过来的public key开始通讯了。注意,非对称加密的过程在这里开始了。client生成了一个pre-master secret(通常也是一个随机数)P,使用server提供的public key加密P之后生成P', 将P'发给了server。

server收到P'后,用自己的private key解密还原出了P。注意这个P和之前A的最大不同是加密传输过来的哦。而且理论上在server没有泄露自己private key的情况下, 只有server能够从P'还原出P。So,此时,client和server双方已经具备了生成双方后面通讯时对称加密需要使用的master secret的条件:双方都有的一个确定的伪随机函数、3个彼此都知道的随机数A、B和P。

于是,双方在自己一方,通过共同的伪随机数和共同的素材,生成出来了master secret。到这里,双方谈判的过程基本上可以结束了。因为谈判的初衷已经完全符合了。回想一下,整个过程不就是为了在公网上这个非安全的环境中让彼此都清楚使用啥对称加密算法以及使用什么密钥吗?等等,这个握手过程为了保证可用性,还拿出来先测试一下,是否真的行得通才行啊。于是还有下面的两步。

client用双方同意的MAC(message authentication code)算法,比如MD5,加密一段明文Q(这个明文是啥应该都没关系,因为都会发给server的)生成了MAC。然后用双方同意的对称加密算法(比如AES)加密了Q和MAC之后,生成了一段Finished Message发给了server。(这里,根据TLS record protocol,这个Finished Message其实是个具体的TLS record,他携带的Content type为20,这相当于告诉server:I am ready to begin the normal communication.)

server收到这条TLS record之后,就会尝试先解密密文(Decryption),再用约定的MAC算法验证内容是否被篡改(Verification)。这时,如果这两个任何一项工作失败了,就前功尽弃了。。。这里假设都成功了,于是server做了上一步client同样的事情:生成一份Content type为20的Finished Message,发给client。至此,整个握手过程正式结束。。。下面的通讯就是双方直接使用对称加密算法直接加解密message的过程啦,当然每次交互的过程中,还会包括上面描述的MAC验证的过程

HTTPS协议原理透析的更多相关文章

  1. 爬虫前篇 /https协议原理剖析

    爬虫前篇 /https协议原理剖析 目录 爬虫前篇 /https协议原理剖析 1. http协议是不安全的 2. 使用对称秘钥进行数据加密 3. 动态对称秘钥和非对称秘钥 4. CA证书的应用 5. ...

  2. HTTPS协议原理解析

    一.对称加密与非对称加密 1,定义: 对称加密:加密和解密的秘钥使用的是同一个. 非对称加密:与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatek ...

  3. 浅谈HTTPS以及Fiddler抓取HTTPS协议

    最近想尝试基于Fiddler的录制功能做一些接口的获取和处理工作,碰到的一个问题就是简单连接Fiddler只能抓取HTTP协议,关键的登录请求等HTTPS协议都没有捕捉到,所以想让Fiddler能够同 ...

  4. fidder https以及Fiddler抓取HTTPS协议

    一.浅谈HTTPS 我们都知道HTTP并非是安全传输,在HTTPS基础上使用SSL协议进行加密构成的HTTPS协议是相对安全的.目前越来越多的企业选择使用HTTPS协议与用户进行通信,如百度.谷歌等. ...

  5. 浅谈HTTPS以及Fiddler抓取HTTPS协议(摘抄)

    一.浅谈HTTPS 我们都知道HTTP并非是安全传输,在HTTPS基础上使用SSL协议进行加密构成的HTTPS协议是相对安全的.目前越来越多的企业选择使用HTTPS协议与用户进行通信,如百度.谷歌等. ...

  6. 【转载】浅谈HTTPS以及Fiddler抓取HTTPS协议

    最近想尝试基于Fiddler的录制功能做一些接口的获取和处理工作,碰到的一个问题就是简单连接Fiddler只能抓取HTTP协议,关键的登录请求等HTTPS协议都没有捕捉到,所以想让Fiddler能够同 ...

  7. Https协议简析及中间人攻击原理

    1.基础知识 1.1 对称加密算法 对称加密算法的特点是加密密钥和解密密钥是同一把密钥K,且加解密速度快,典型的对称加密算法有DES.AES等                              ...

  8. 透析ARP原理

    对于ARP协议, 我本来是不了解的,只是解决了两个ARP相关的P2的Bug后,也就懂了.本文将从原理的角度对ARP做一个透析. 1. 什么是ARP? ARP(Address Resolution Pr ...

  9. HTTP协议请求响应过程和HTTPS工作原理

    HTTP协议 HTTP协议主要应用是在服务器和客户端之间,客户端接受超文本. 服务器按照一定规则,发送到客户端(一般是浏览器)的传送通信协议.与之类似的还有文件传送协议(file transfer p ...

随机推荐

  1. shell统计一个文件里某行出现的次数并排序

    话说有个aaa.txt文件,文件内容如下: aaaabbbbccccddddeeeeffffmmmmooooaaaaccccaaaabbbbddddaaaammmmbbbbaaaaoooo 然后面试题 ...

  2. linux watch命令

    watch是一个非常实用的命令,基本所有的Linux发行版都带有这个小工具,如同名字一样,watch可以帮你监测一个命令的运行结果,省得你一遍遍的手动运行.在Linux下,watch是周期性的执行下个 ...

  3. IntelliJ IDEA 、genymotion模拟器、Android开发环境搭建

    首先打开IDEA,看到该界面,如果没有该界面,请在User/用户名/IntelliJIDEAProjects/下删除所有项目文件夹.然后重启IDEA即可看到 接着开始配置jdk和sdk 然后在Proj ...

  4. 基于 Token 的身份验证

    最近了解下基于 Token 的身份验证,跟大伙分享下.很多大型网站也都在用,比如 Facebook,Twitter,Google+,Github 等等,比起传统的身份验证方法,Token 扩展性更强, ...

  5. hadoop System times on machines may be out of sync. Check system time and time zones.

    之前环境一直好好的,由于玩坏了一个mini3只能复制一个了,但是复制之后就出现这个问题了 解决办法是 设置xshell向每一个窗口发消息http://mofansheng.blog.51cto.com ...

  6. 【Mysql】Navicat For Mysql快捷键

    ctrl+q 打开查询窗口ctrl+/ 注释sql语句ctrl+shift +/ 解除注释ctrl+r 运行查询窗口的sql语句ctrl+shift+r 只运行选中的sql语句F6 打开一个mysql ...

  7. Spring Cloud 微服务二:API网关spring cloud zuul

    前言:本章将继续上一章Spring Cloud微服务,本章主要内容是API 网关,相关代码将延续上一章,如需了解请参考:Spring Cloud 微服务一:Consul注册中心 Spring clou ...

  8. Windows server2008 搭建ASP接口訪问连接oracle数据库全过程记录

    真的是太不easy了,曾经的时候在window server 2003上面搭建了一套asp+oracle的接口系统.就费了好大的劲儿,事实上那会迷迷瞪瞪的也不知道怎么的就弄好了,也懒得管了.OK,从昨 ...

  9. atom常用插件安装

    安装插件方法: File -Settings -Install 在搜索框里搜索你想要的插件,出来之后 点击install ,下图以 linter-selint 为例 ATOM常用插件推荐 simpli ...

  10. windows下php配置redis

    方法/步骤 1.使用phpinfo()函数查看PHP的版本信息,这会决定扩展文件版本   2.根据PHP版本号,编译器版本号和CPU架构, 选择php_redis-2.2.5-5.5-ts-vc11- ...