参考:架构师必读!以图文的方式解锁 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. 自定义的cell上面有图片时,如果产生了重用,图片可能会错乱问题

    当被重用的cell将要显示时,会调用这个方法,这个方法最大的用武之地是当你自定义的cell上面有图片时,如果产生了重用,图片可能会错乱(当图片来自异步下载时及其明显),这时我们可以重写这个方法把内容抹 ...

  2. python+selenium 页面中存在选项卡时,获取页面内容的小技巧

    最近用selenium读取页面内容时,遇到包含选项卡的页面,由于选项卡多由js加载其中的内容,所以在网址打开时只能获取到默认显示的选项卡中的内容,而tab2.tab3等等都需要傻傻的点击一下才会获取到 ...

  3. hdu4553约会安排(线段树区间合并)

    链接 poj3667的加强版 当时的题解 这里只不过对于女神需要另开算,DS的占用的时间不加在女神身上,女神的时间都要加,清空的时候也都要算. #include <iostream> #i ...

  4. mysql查询某个数据库某个表的字段

    1.查看字段详细信息 -- 查看详细信息 SELECT COLUMN_NAME "字段名称", COLUMN_TYPE "字段类型长度", IF(EXTRA=& ...

  5. 洛谷 P1902 刺杀大使

    刺杀大使 一道并不难的二分题,竟让我交了上20次,诶,果然还是我太弱了. 看完题目就基本想到要怎么做了: 只需要对最小伤害代价进行二分即可,check()函数里用搜索判断是否可以到达最后一行,这里的c ...

  6. main函数与命令行参数

    main函数的概念 C语言中main函数称之为主函数 一个c程序从main函数开始执行的 下面的main函数定义正确吗? main函数的本质 main函数是操作系统调用的函数 操作系统总是将main函 ...

  7. 精通AngularJS(三)深入scope,继承结构,事件系统和生命周期

    深入探讨 Scope 作用域 每一个 $scope 都是类 Scope 的一个实例.类 Scope 拥有可以控制 scope 生命周期的方法,提供事件传播的能力,并支持模板渲染. 作用域的层次结构 让 ...

  8. RK3288开发过程中遇到的问题点和解决方法之Packages

    去除桌面渐变黑边 Launcher3/.../Launcher.java SETWorkspaceBackground => setWorkspaceBackground 注释boolean i ...

  9. Azure 进阶攻略 | 关于Java 和事件中心的那不得不说的事

    物联网技术辣么火,虽然之前有说过不少,但今天,仍有一个憋在我心里已久,不得不说的话题:基于Azure 的物联网平台必不可少,你可能已经在使用,但也许并没有意识到的服务:Azure 事件中心. 啊?事件 ...

  10. 如何处理Docker错误消息:please add——insecure-registry

    本地安装Kubernetes时,遇到如下的错误消息: pleade add --insecure-registry gcr.io to daemon's arguments 解决方案:点击Docker ...