参考:架构师必读!以图文的方式解锁 HTTPS原理,10分钟还原HTTPS真像!

  对于消息安全的定义是:即使消息被中间人拦截到,中间人也没办法解读出其中的消息。

对称加密

  要实现消息安全,首先想到的是“对称加密”。发送消息前先对消息加密,对方收到消息后,对消息进行解密。这个过程中加密和解密都使用同一个密钥。但是在C/S这种多对一的情况下,每个连接都采用同一种对称加密方式的话,就等同于不加密(因为密钥人人都有,将消息拦截到后,都可以对消息进行解密读取)。

不同连接使用不同的对称加密方式

  解决以上问题,就是对每个连接使用不同的对称加密方式。这样一来就算消息被拦截了,别人也无法解密消息,因为大家的加密方式都是不同的,你不知道我是怎么加密的,自然也就很难解密了。但是对于使用哪种加密方式,这个怎么协商决定呢?协商的过程中如何保证消息的安全呢?

非对称加密来加密协商过程

  使用“非对称加密”。该加密方式的特点是,公钥加密的消息只能用私钥来解密,私钥加密的消息只能用公钥来解密。私钥和公钥属于一对多的关系,所以私钥一般放在服务器,而公钥放在多个客户端,使用非对称加密可以保证客户端到服务器方向的消息是安全的

随机的协商加密算法

  客户端与服务器仅仅在需要开始交互的时候,用随机数来决定该使用哪一种对称加密算法。

安全地得到公钥

  实现非对称加密的一个前提是:多个客户端都得到了公钥。实现的方式有两种:

  1. 服务器给每个客户端直接发放公钥。
  2. 服务器将公钥放在另一台服务器上,让用户自己去取公钥。

  后者比前者多出来一次请求,而且两者同样需要解决公钥传输的安全问题,所以选择前者的实现方式。公钥传输过程中可能会被掉包,如图所示:

  造成以上问题的原因是:客户端无法判断公钥的是否被中间人做了调包。

数字证书

  我们服务器使用可信的第三方平台的私钥对我们公钥进行加密,加密后的数据称为“数字证书”,客户端从我们服务器获取到这个数字证书后,再使用存储在客户端本地的这个第三方平台的公钥对数字证书进行解密,得到我们服务器的公钥。

  具体这个数字证书是怎么跑到我们的服务器上的,这个过程留意后续的章节“CA如何颁发数字证书给我们的服务器管理员”。

数字签名

  以上发放数字证书的过程属于非对称加密,第三方平台充当服务器,我们的服务器充当了客户端而已。在非对称加密中,公钥是对所有客户端公开的,也就是说以上过程中,数字证书在返回给我们服务器的过程中,如果被中间人拦截,中间人也拥有第三方平台的公钥,就可以对给我们服务器的数字证书进行解密,从而对内容进行拦截调包,过程如下:

  造成以上问题的原因是:客户端直接就相信了返回的数字证书。解决的办法是客户端对得到的数字证书进行校验,判断这个证书是否可信。实现的策略类似于奖状证书上的编号,客户端得到证书后,取出其中的证书编号,向第三方询问这个编号是否与证书信息对应。如果对应则可信。

  为了不拖慢通信的效率,以上校验在客户端本地进行。

本地校验证书

  具体要怎么校验,需要由证书将校验的方式告知客户端,客户端采用这种方式生成一个证书编号,如果这个编号与证书的编号一致,则说明校验通过。对校验方式进行举例,如对证书内容进行MD5计算得出证书编号。这里所说的证书编号其实就是https中的数字签名,证书就是https的数字证书。

  以上验证了证书的正确性,接着就要使用第三方的公钥对证书进行解密,从而获取我们服务器的公钥了。如何获取第三方的公钥呢?

  浏览器和操作系统都会维护一个权威的第三方机构列表(包括它们的公钥)。因为客户端接收到的证书中会写有颁发机构,客户端就根据这个颁发机构的值在本地找相应的公钥。到这里可以看出前文所说的“第三方”其实就是CA,可能会有疑惑:本地的公钥安全吗?答案是:相信它是安全,所以要求各位尽量使用正版的操作系统。

CA如何颁发数字证书给我们的服务器管理员

  对于每个CA机构的申请方式大同小异,申请流程如下:

  获取到证书后,具体怎么配置到自己的服务器上,自己去google。

总结

  以上使用推算的方式还原了https的设计思路,能明白https比http多出来很多次交互,导致性能低。以上一大堆工作就是为了能安全地协商出C/S之间的对称加密方式,这就是SSL/TLS主要的工具,在协商好了对称加密的方式后,CS之间就使用这个对称加密方式进行通信了。

  HTTPS要使客户端与服务器端的通信过程得到安全保证,必须使用的对称加密算法,但是协商对称加密算法的过程,需要使用非对称加密算法来保证安全,然而直接使用非对称加密的过程本身也不安全,会有中间人篡改公钥的可能性,所以客户端与服务器不直接使用公钥,而是使用数字证书签发机构颁发的证书来保证非对称加密过程本身的安全。这样通过这些机制协商出一个对称加密算法,就此双方使用该算法进行加密解密。从而解决了客户端与服务器端之间的通信安全问题。

https原理解读的更多相关文章

  1. HTTPS 原理解析

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

  2. [转]HTTPS那些事(一)HTTPS原理

    [转]HTTPS那些事(一)HTTPS原理 http://www.guokr.com/post/114121/ 楔子谣言粉碎机前些日子发布的<用公共WiFi上网会危害银行账户安全吗?>, ...

  3. HTTPS 原理浅析及其在 Android 中的使用

    作者:曹丰斌   本文首先分析HTTP协议在安全性上的不足,进而阐述HTTPS实现安全通信的关键技术点和原理.然后通过抓包分析HTTPS协议的握手以及通信过程.最后总结一下自己在开发过程中遇到的HTT ...

  4. https原理及其中所包含的对称加密、非对称加密、数字证书、数字签名

    声明:本文章已授权公众号Hollis转载,如需转载请标明转载自https://www.cnblogs.com/wutianqi/p/10654245.html(安静的boy) 一.为什么要使用http ...

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

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

  6. [转帖]HTTPS系列干货(一):HTTPS 原理详解

    HTTPS系列干货(一):HTTPS 原理详解 https://tech.upyun.com/article/192/HTTPS%E7%B3%BB%E5%88%97%E5%B9%B2%E8%B4%A7 ...

  7. HTTPS原理解析-转

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

  8. NRF24L01——工作原理解读

    源: NRF24L01——工作原理解读

  9. OpenSSL和https原理

    https原理: 浏览器请求服务端的公钥证书,server将注冊的证书发送给client. client向办法机构验证证书的合法性,证书 包含公钥,server网址及一些信息. 验证完成,client ...

随机推荐

  1. Java | 基础归纳 | 随机数应用

    Java中一般有两种随机数,一个是Math中random()方法,一个是Random类. Math.random();//返回0~1的中随机数值 Random random = new Random( ...

  2. PostgreSQL-9-别名与动态表复制

    1.列别名 SELECT column_name AS alias_name FROM table_name conditions...  ; alias_name: 它指定分配给列的临时名称 SEL ...

  3. (bzoj1337 || 洛谷P1742 最小圆覆盖 )|| (bzoj2823 || 洛谷P2533 [AHOI2012]信号塔)

    bzoj1337 洛谷P1742 用随机增量法.讲解:https://blog.csdn.net/jokerwyt/article/details/79221345 设点集A的最小覆盖圆为g(A) 可 ...

  4. 执行脚本 提示 command not found

    问题现象: 初学shell,写了个脚本, 1.从windows 写好 脚本,然后部署到 linux 上. 2.chmod +x之后执行提示command not found,系统环境redhat9,用 ...

  5. 17115 ooxx numbers 交表

    17115 ooxx numbers 时间限制:1000MS  内存限制:65535K提交次数:0 通过次数:0 题型: 编程题   语言: G++;GCC Description a number ...

  6. 17997 Simple Counting 数学

    17997 Simple Counting 时间限制:2000MS  内存限制:65535K提交次数:0 通过次数:0 题型: 编程题   语言: 不限定 Description Ly is craz ...

  7. Unity Shader入门精要学习笔记 - 第8章 透明效果

    转载自 冯乐乐的 <Unity Shader入门精要> 透明是游戏中经常要使用的一种效果.在实时渲染中要实现透明效果,通常会在渲染模型时控制它的透明通道.当开启透明混合后,当一个物体被渲染 ...

  8. kafka基础六

    kafka中的高可用HA 1.replication副本 同一个partition会有一个leader和多个副本,这些副本存储的内容与leader相同,可以通过 server.properties 配 ...

  9. CF1060D Social Circles

    思路: 贪心.既然每个人的左边是其他人的右边,每个人的右边是其他人的左边,那么使重叠的部分最多即可. 实现: #include <bits/stdc++.h> using namespac ...

  10. ES-windos环境搭建(1)

    前言 由于elasticsearch为Java开发,所以它还依赖Java JDK环境,并且对版本还有要求,需要1.8(含)以上.我们首先来配置Java JDK环境. JDK简介 JDK是Java语言的 ...