参考:架构师必读!以图文的方式解锁 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. 51Nod 1098 最小方差 (数论)

    #include <iostream> #include <cstdio> #include <algorithm> using namespace std; ty ...

  2. [題解](水/并查集)luogu_P2170選學霸

    很簡單的水題,因為智障沒有A所以發篇博客 同樣的題:luogu_P1455 搭配購買 用并查集維護一下所有實力相等的人的size,然而你可以選多個size......,於是跑個背包就行了,只要注意一下 ...

  3. Mysql的跨服务器操作

    1.查询FEDERATED功能是否开启: show ENGINES; 2.如果状态为NO则需修改my.ini文件,增加一行federated配置: my.ini配置文件的默认路径 C:\Program ...

  4. POP页面暂时不销毁

    摘要:我们经常使用的QQ空间,当我们短时间内两次进入页面的时候,页面是没有重新创建的,不光是缓存的数据,是整个页面都没有变.我们在开发中可能也会有这样的需求.开始的时候,想的思路是这样的:用定时器,将 ...

  5. Codeforces Round #390 (Div. 2) D

    All our characters have hobbies. The same is true for Fedor. He enjoys shopping in the neighboring s ...

  6. SSH之小问题解惑

    (注:以下版本指的是spring3+hibernate3+struts2) 1,web开发中,servlet对象是否线程安全? 当一个http请求到来时,web容器的调度线程(Dispach Thre ...

  7. nginx之location简单匹配总结

    location匹配规则与优先级 = 精确匹配,匹配成功则停止匹配 ^~   前缀普通字符匹配,匹配成功则停止匹配 ~ 正则匹配,区分大小写:多个正则按顺序匹配 ~*   正则匹配,不区分大小写:多个 ...

  8. [转]Creating Mailing Labels in SQL Server Reporting Services (rdlc 数据1页 2竖排 显示)

    本文转自:http://blogs.wrox.com/article/creating-mailing-labels-in-sql-server-reporting-services/ Most wo ...

  9. 杂谈 什么是伪共享(false sharing)?

    问题 (1)什么是 CPU 缓存行? (2)什么是内存屏障? (3)什么是伪共享? (4)如何避免伪共享? CPU缓存架构 CPU 是计算机的心脏,所有运算和程序最终都要由它来执行. 主内存(RAM) ...

  10. 打开一个本地apk进行安装

    Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); File file = new File(Environment ...