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. html5 的a标签是可以拨电话的,通过其Href属性来实现

    <a href="tel:18700000000">点击给我打电话吧!</a> 注: 1.<a href="tel:18750000000& ...

  2. Spring事务管理之声明式事务管理-基于注解的方式

    © 版权声明:本文为博主原创文章,转载请注明出处 案例 - 利用Spring的声明式事务(TransactionProxyFactoryBean)管理模拟转账过程 数据库准备 -- 创建表 CREAT ...

  3. jQuery 遍历 - eq() 和siblings() 方法

    eq() 方法将匹配元素集缩减值指定 index 上的一个. 通过为 index 为 2 的 div 加入适当的类.将其变为蓝色: <!DOCTYPE html> <html> ...

  4. Oracle 技术支持之现场优化的思维路径

    性能调优是每个DBA职业生涯中都能遇到的任务     大到世界五百强的核心系统,小到乡镇企业的进销存,几乎都会有要调优的时候     面对形形色色的系统,林林总总的需求,调优的手段也是丰富多彩 定位问 ...

  5. oracle高性能的SQL语句的写法

    1.当多表查询的时候,把数据量小的表放在最后面,ORACLE会把最后面的表当作基础表,因为表间连接时,最右边的表会被放到嵌套循环的最外层.最外层的循环次数越少,效率越高. 2.Oracle采用自下而上 ...

  6. iOS Masonry 查看更多 收起

    Masonry 查看更多 收起效果实现,带动画 demo下载地址: https://github.com/qqcc1388/MasonryDemo

  7. MVC进阶学习--View和Controller之间的数据传递(二)

    1. 使用Request.Form MVC 将页面简单化,与WebForm中的事件机制完全不同,就和普通的html标签表单提交没有任何区别(当然WebForm中的事件机制其实也是表单提交).在表单提交 ...

  8. [WebGL入门]二十五,点光源的光照

    注:文章译自http://wgld.org/,原作者杉本雅広(doxas),文章中假设有我的额外说明.我会加上[lufy:].另外,鄙人webgl研究还不够深入,一些专业词语.假设翻译有误,欢迎大家指 ...

  9. centos6.9使用NTFS-3G挂载ntfs文件系统

    centos6.9使用NTFS-3G挂载ntfs文件系统 工作中,难免需要到linux 系统上拷贝文件,但linux 自己不支持ntfs,下面就是解决问题的办法. NTFS-3G是一个开源软件,支持在 ...

  10. 【问题】:spring cloud sleuth日志组件冲突问题

    在使用spring cloud sleuth的时候,启动工程报错如下: 根据错误信息明显就是jar包冲突,spring boot默认用的是logback,所以移除其中一个依赖就可以了,修改pom依赖为 ...