参考:架构师必读!以图文的方式解锁 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. bzoj1458士兵占领

    传送门 和上一题差不多,每行和每列分别看做一个点,障碍点坐标的行和列就不建边,再按照有源汇上下界建图就好了,唯一的区别就是这个题求的是最小流 这个题的数据好水呢,建错图也能A呢 #include< ...

  2. 基于SpringBoot+MyBatis实现一套电商系统

    项目介绍 mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现. 前台商城系统包含首页门户.商品推荐.商品搜索.商品展示.购物车.订单流程.会员中心 ...

  3. JSP && Servlet | 上传图片到数据库

    参考博客: https://blog.csdn.net/qiyuexuelang/article/details/8861300 Servlet+Jsp实现图片或文件的上传功能 https://blo ...

  4. 在centos7下搭建nginx环境,并配置负载均衡,最终能达到通过域名直接访问的目的

    1.关于nginx:个人理解的nginx它的主要用途就是负载均衡,当然可能还有其他一些功能可能我们不长用到,我们通过nginx可以干什么呢?为什么要引入它呢?原因是当有高并发访问服务器时,服务器可能会 ...

  5. JDBC事务之例子篇

    上一篇随笔记了一些有关JDBC事务管理的理论知识.这篇来看例子(主要怕一篇随笔装所有东西太长了然后分开呵呵) 一般讲事务管理的,都是拿转钱来当例子的,嗯没错我们这也是. 这个是数据库中的t_accou ...

  6. jQuery prop() 与 removeProp()源码解读

    prop() prop: function( elem, name, value ) { var ret, hooks, notxml, nType = elem.nodeType; // don't ...

  7. Github开源项目单

    以下涉及到的数据统计与 2019 年 5 月 1 日 12 点,数据来源:https://github.com/trending/java?since=monthly . 下面的内容从 Java 学习 ...

  8. hybrid app开发中:苹果移动设备实用Meta标签

    hybrid app开发中:苹果移动设备实用Meta标签 “apple-mobile-web-app-status-bar-style”作用是控制状态栏显示样式 具体效果如下: status-bar- ...

  9. 2566. [51nod 1129] 字符串最大值

    [题目描述] 一个字符串的前缀是指包含该字符第一个字母的连续子串,例如:abcd的所有前缀为a, ab, abc, abcd. 给出一个字符串S,求其所有前缀中,字符长度与出现次数的乘积的最大值. 例 ...

  10. 前端经典面试题 不经典不要star!

    前言 (以下内容为一个朋友所述)今天我想跟大家分享几个前端经典的面试题,为什么我突然想写这么一篇文章呢?今天我应公司要求去面试了下几位招聘者,然后又现场整不出几个难题,就搜了一下前端变态面试题! HA ...