一 前言

  在说HTTPS之前先说说什么是HTTP,HTTP就是我们平时浏览网页时候使用的一种协议。HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全。为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。SSL目前的版本是3.0,被IETF(Internet Engineering Task Force)定义在RFC 6101中,之后IETF对SSL 3.0进行了升级,于是出现了TLS(Transport Layer Security) 1.0,定义在RFC 2246。实际上我们现在的HTTPS都是用的TLS协议,但是由于SSL出现的时间比较早,并且依旧被现在浏览器所支持,因此SSL依然是HTTPS的代名词,但无论是TLS还是SSL都是上个世纪的事情,SSL最后一个版本是3.0,今后TLS将会继承SSL优良血统继续为我们进行加密服务。目前TLS的版本是1.2,定义在RFC 5246中,暂时还没有被广泛的使用 ()

概念可参考百科

http://baike.baidu.com/link?url=M8pBu1j_22f0PW6izvAOCTjhepyRcT320U9LDmjyzb586OYS_aBALxfqIGVca1V-8MJeSl3bTUEOThMuwpamPK

二  HTTPS 验证原理

  Https在真正请求数据前,先会与服务有几次握手验证,以证明相互的身份,以下图为例

2.1  验证流程

注:文中所写的序号与图不对应但流程是对应的

1 客户端发起一个https的请求,把自身支持的一系列Cipher Suite(密钥算法套件,简称Cipher)发送给服务端

2  服务端,接收到客户端所有的Cipher后与自身支持的对比,如果不支持则连接断开,反之则会从中选出一种加密算法和HASH算法

以证书的形式返回给客户端 证书中还包含了 公钥 颁证机构 网址 失效日期等等。

3 客户端收到服务端响应后会做以下几件事

3.1 验证证书的合法性

    颁发证书的机构是否合法与是否过期,证书中包含的网站地址是否与正在访问的地址一致等

证书验证通过后,在浏览器的地址栏会加上一把小锁(每家浏览器验证通过后的提示不一样 不做讨论)

3.2 生成随机密码

如果证书验证通过,或者用户接受了不授信的证书,此时浏览器会生成一串随机数,然后用证书中的公钥加密。       

3.3 HASH握手信息

用最开始约定好的HASH方式,把握手消息取HASH值,  然后用 随机数加密 “握手消息+握手消息HASH值(签名)”  并一起发送给服务端

在这里之所以要取握手消息的HASH值,主要是把握手消息做一个签名,用于验证握手消息在传输过程中没有被篡改过。

4  服务端拿到客户端传来的密文,用自己的私钥来解密握手消息取出随机数密码,再用随机数密码 解密 握手消息与HASH值,并与传过来的HASH值做对比确认是否一致。

然后用随机密码加密一段握手消息(握手消息+握手消息的HASH值 )给客户端

5  客户端用随机数解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密

因为这串密钥只有客户端和服务端知道,所以即使中间请求被拦截也是没法解密数据的,以此保证了通信的安全

非对称加密算法:RSA,DSA/DSS     在客户端与服务端相互验证的过程中用的是对称加密 
对称加密算法:AES,RC4,3DES     客户端与服务端相互验证通过后,以随机数作为密钥时,就是对称加密
HASH算法:MD5,SHA1,SHA256  在确认握手消息没有被篡改时

2.2  客户端如何验证 证书的合法性?

1. 验证证书是否在有效期内。

  在服务端面返回的证书中会包含证书的有效期,可以通过失效日期来验证 证书是否过期

2. 验证证书是否被吊销了。

  被吊销后的证书是无效的。验证吊销有CRL(证书吊销列表)和OCSP(在线证书检查)两种方法。

证书被吊销后会被记录在CRL中,CA会定期发布CRL。应用程序可以依靠CRL来检查证书是否被吊销了。

CRL有两个缺点,一是有可能会很大,下载很麻烦。针对这种情况有增量CRL这种方案。二是有滞后性,就算证书被吊销了,应用也只能等到发布最新的CRL后才能知道。

增量CRL也能解决一部分问题,但没有彻底解决。OCSP是在线证书状态检查协议。应用按照标准发送一个请求,对某张证书进行查询,之后服务器返回证书状态。

OCSP可以认为是即时的(实际实现中可能会有一定延迟),所以没有CRL的缺点。

3. 验证证书是否是上级CA签发的。

windows中保留了所有受信任的根证书,浏览器可以查看信任的根证书,自然可以验证web服务器的证书,
是不是由这些受信任根证书颁发的或者受信任根证书的二级证书机构颁发的(根证书机构可能会受权给底下的中级证书机构,然后由中级证书机构颁发中级证书)
在验证证书的时候,浏览器会调用系统的证书管理器接口对证书路径中的所有证书一级一级的进行验证,只有路径中所有的证书都是受信的,整个验证的结果才是受信
 
 
 
 
 

三  手机如何抓取HTTPS的请求数据

 
    当站点由HTTP转成HTTPS后是更安全了,但是有时候要看线上的请求数据解决问题时却麻烦了,因为是HTTPS的请求,你就算拦截到了那也是加密的数据,没有任何意义。
  那有方法解决吗? 答案是肯定的! 接下来就来个实例教程,教大家如何查看HTTPS的请求数据
 
  首先需要安装Fiddler 用于拦截请求,和颁发https证书
 
3.1  Fiddler根证书导出
   
  按图中操作把导出,再将导出的的根证书"FiddlerRoot.cer" 的后辍名 改为"crt"  "FiddlerRoot.crt" 因为手机没法直接安装 cer格式的证书
 
    
 
3.2  证书安装
  在本机把证书移到本机IIS中的某个网站的物理目录中,然后在手机浏览器中访问该证书的目录 如:"192.168.0.102:8001/FiddlerRoot.crt"
 如图
 
    
 
  此时手机会提示按装根证书,其实安装一个不受信的根证书是非常危险的,如果你安装了某些钓鱼网站或者有危害的根证书,那只要是该根证书下的所有证书都会验证通过,
那随便一个钓鱼网的网站只要安装了该根证书下的证书,都不会有任何警告提示。
很可能让用户有财产损失。所以在安装根证书时,手机系统会要求你输入锁屏密码,以确保是本人操作。
安装过程如下
 
  Fiddler的根证书名字都提示了是不受信的根证书
    
 
安装完成
 
    
 
 
 
 
3.3  通过Fiddler抓取手机的HTTPS请求
 
       Fiddler默认侦听的端口是8888,把手机WiFI的Http 代理设为本机Fiddler的地址如下图
   这样手机上所有的请求都会先通过Fiddler,Fiddler再转发到目标服务器
 
注意: 在家中的路由器中有线与无线通常不在一个网段,会导致Fiddler无法抓到手机的包,需要手动设置路由,可自行百度
 
    
 
 
 
    代理也设好之后便可以开始抓到Https的请求内容了如图
Https的默认端口号是 “443”可以看出红框中的是未装根证书前的请求,加了一把小锁,而且请求记录都是灰色的
而安装证书后请求则一切正常,请求内容也都可以正常看到。
 
    
 
 
3.4  为什么安装了Fiddler根证书可以看到Https请求内容
 
  要解释这个问题,就需要了解最开始的Https的验证原理了,回顾一下,先是客户端把自己支持的加密方式提交到服务端,然后服务端 会返回一个证书
到这一步问题来了,手机未什么要安装Fiddler的证书呢?
  第一 因为Fiddler在客户端(手机)发出Https请求时,充当了服务器的角色,需要返回一个证书给客户端,
但是Fiddler的证书并不是CA机构颁发的,客户端一验证就知道是假的连接肯定就断了,那怎么办呢?
那就想办法让客户端信任这个服务端,于是就在客户端安装一个Fiddler的根证书。
所以只要是通过Fiddler的Https请求,验证根证书时自然会通过,因为Fiddler的根证书你已经受信了!
 
     第二 现在只是客户端(手机)和Fiddler这个伪服务端的Https验证通过了,还没有到真正的服务端去取数据的,此时Fiddler会以客户端的身份与真正的服务端再进行一次HTTPS的验证,最后拿到数据后
又以服务端的身份与客户端(手机)通信。也就是说在一次请求中数据被两次加解密,一次是手机到Fiddler,一次是Fiddler到真正的服务端。
 
整个过程  手机----》Fiddler----》 服务器  Fiddler 即充当了服务端又充当了客户端,才使得数据能够正常的交互,这个过程中最重要的一环就是手机端安装的 根证书!
 
 
 
 

四  总结

 
 写了这么多,其实也只是把Https的基本流程写清楚了一部分,这其中每一个步骤深入下去都是一门学科,而对于我们而言,能清楚其大致运作流程,做到心中有数据就算可以了,
Https在目前的网络数据安全传输占据着重要地位,目前可能也没有更优的方案来代替Https。另外一定要注意 不要随便安装不确定的的根证书,以免带来不必要的损失。
写这篇文章时,已经进入我的春节假期,而我也已经踏上了 回家的火车,大家有疑问可以在评论中回复,如有错误之处还望大家能指出,以免误导他人
 
提前祝大家新年快乐!
 
 
 

如果您觉得本文让您有所收获,不妨点下赞,为我的付出,给一点点回报!

如果您觉得本人也有点意思,不妨点个观注,大家一起谈技术,谈人生!

 
 

以下为参考资料

 
 
 
 

HTTPS 原理解析的更多相关文章

  1. Tengine HTTPS原理解析、实践与调试【转】

    本文邀请阿里云CDN HTTPS技术专家金九,分享Tengine的一些HTTPS实践经验.内容主要有四个方面:HTTPS趋势.HTTPS基础.HTTPS实践.HTTPS调试. 一.HTTPS趋势 这一 ...

  2. HTTPS原理解析-转

    这篇文章关于Https的讲解真的是太透彻了,转过来备忘. 来源:腾讯bugly 另附两个SSL/TLS的交互详解:一.二 基于此文章的学习总结:下一篇文章 1.HTTPS 基础 HTTPS(Secur ...

  3. HTTPS 原理解析(转)

    一 前言 在说HTTPS之前先说说什么是HTTP,HTTP就是我们平时浏览网页时候使用的一种协议.HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全.为了保证 ...

  4. 【大量干货】史上最完整的Tengine HTTPS原理解析、实践与调试

    本文邀请阿里云CDN HTTPS技术专家金九,分享Tengine的一些HTTPS实践经验.内容主要有四个方面:HTTPS趋势.HTTPS基础.HTTPS实践.HTTPS调试. 一.HTTPS趋势 这一 ...

  5. HTTPS原理解析

    HTTPS 一些概念 http 概述 HTTP是一个客户端(用户)和服务端(网站)之间请求和应答的标准,通常使用TCP协议.其本身位于TCP/IP协议族的应用层. 特点 - 客户端&服务器 - ...

  6. NetWork--HTTPS 原理解析<转>

    转载链接:https://www.cnblogs.com/zery/p/5164795.html HTTPS 原理解析   一 前言 在说HTTPS之前先说说什么是HTTP,HTTP就是我们平时浏览网 ...

  7. 【算法】(查找你附近的人) GeoHash核心原理解析及代码实现

    本文地址 原文地址 分享提纲: 0. 引子 1. 感性认识GeoHash 2. GeoHash算法的步骤 3. GeoHash Base32编码长度与精度 4. GeoHash算法 5. 使用注意点( ...

  8. JavaScript 模板引擎实现原理解析

    1.入门实例 首先我们来看一个简单模板: <script type="template" id="template"> <h2> < ...

  9. 开源磁力搜索爬虫dhtspider原理解析

    开源地址:https://github.com/callmelanmao/dhtspider. 开源的dht爬虫已经有很多了,有php版本的,python版本的和nodejs版本.经过一些测试,发现还 ...

随机推荐

  1. JavaScript基本语法(二)

    上篇博文写到JavaScript的数据类型.JavaScript包括了字符串(String).数字(Number).布尔(Boolean).数组(Array).对象(Object).空(Null).未 ...

  2. Dev TreeList 总结

    1.表格的要求:如果要求有父子节点关系,则必须有ID和ParentID字段,并且父节点ParentID字段必须指向ID字段. 2.Access表格在穿入DATATABLE的时候,要想表现出父子节点关系 ...

  3. SharePoint 快捷获取列表栏内部名称

    在列表设置页面点击浏览器书签获取列表字段内部名称,使用效果如下图: 如何使用: 修改浏览器上任意书签的url地址为以下代码,注意:代码中不能有换行符 javascript:(function(){va ...

  4. SharePoint 2013 工作流之使用Designer配置示例篇

    在SharePoint 2013中,支持SharePoint Designer 2013(以下简称SPD)配置简单的工作流,完成我们的业务需要.下面,我们就举一个小例子,实现SPD配置工作流. 1. ...

  5. IOS开发基础知识--碎片5

    二十三:addSubview和insertSubview 区别 addSubview 是将view加到所有层的最顶层 相当于将insertSubview的atIndex参数设置成view.subvie ...

  6. ios 提取html 字符串中的img 的地址(图片地址)

    本文原文地址 http://www.cnblogs.com/qianLL/p/6082287.html 有时候 后台返回的是一串html'字符串 我们需要把里面的图片地址提取出来  这个关键就是一个正 ...

  7. 初学HTML 常见的标签(三) 插入类标签

    第三篇博客, 这次说的是插入链接类标签, 我们平常在网页中经常能看到蓝色的链接类标签, 或者是一张图片, 一个电邮, 这些都是插入链接类的标签起的作用. <a></a>链接标签 ...

  8. 转载:WinForm中播放声音的三种方法

    转载:WinForm中播放声音的三种方法 金刚 winForm 播放声音 本文是转载的文章.原文出处:http://blog.csdn.net/jijunwu/article/details/4753 ...

  9. Linux命令学习总结:reboot命令

    命令简介: 该命令用来重启Linux系统.相当于Windows系统中的restart命令. 命令语法: /sbin/reboot [-n] [-w] [-d] [-f] [-i] 或 reboot [ ...

  10. 如何查看Windows服务器运行了多长时间

    前言:有时候管理.维护Windows服务器需要定期重启服务器(为什么需要重启,你懂的),但是这个"定期"有时候会受很多因素影响,例如某台服务器忘了重启:某台服务器那个时间段业务繁忙 ...