一、http

网络协议基于分层架构构建了七层模型,是ISO建立的用于计算机或者通信系统之间的互联的标准体系。下图展示了其中的五层:

http被称为超文本传输协议,是互联网上应用最为广泛的一种网络协议,建立在应用层当中。主要用于从www服务器传输超文本到本地浏览器,更加得高效。

由于http协议是明文传输,也不要求验证主体,所以在传输过程很容易被获取数据内容,这对于互联网数据来说是很不安全的,因此,https就应运而生。

二、加密算法

在了解https之前,需要对一些加密算法有一个概念:

1、对称加密

我们使用密钥A去加密一段数据内容,再使用密钥B去解密这段数据内容,如果加密的密钥A和解密的密钥B是一样的,那么这就是对称加密。如:AES、DES加密算法

2、非对称加密

非对称加密则加密的密钥A和解密的密钥B不一样,所以非对称加密需要两个密钥,它们是成对存在的。通常称用于加密和传输的密钥为公钥,用于解密的密钥为私钥,私钥不在网络中传输。被公钥加密的数据,必须使用对应的私钥才能解密。如:数字签名

3、hash算法(下文不涉及hash算法,这里简单提及)

hash算法是一种简单的单向算法,通过hash算法可以针对数据内容生成一段特定长度、唯一的hash值,但是hash值是不可逆的,经常用于不需要数据还原的完整性校验上。如:MD5、SHA算法

三、https

在上文中,我们了解了http是不安全的明文传输,那https是怎么做到安全传输的呢?

其实https并不是应用层上的一个新的通信协议,它只是在http的基础上加入了一层SSL或TLS,如图:

下面我们通过一个思考过程来了解https是如何工作的:

1、简单对称加密

既然http是不安全的协议,那么我如果希望传输的数据是安全的要怎么办呢?我们能想到的最简单的办法就是对被传输的数据进行加密处理,当传到服务器以后进行数据解密。如图:

这样存在什么问题呢?很显然,如何有人在传输过程截获了data和key,那么他便可以进行解密,所以这样简单的解密过程并不能保证通信安全。

2、非对称加密解决安全问题

我们看到,简单的对称加密是不能保证通信安全的。并且,我们发现不安全的主要原因是在于key是可以被截获并用来解密数据的。

根据这个问题点,我们考虑一下非对称加密。非对称加密中私钥用来解密,公钥用来加密和传输。那么用来解密的私钥就不会被截获,或者截获了公钥却并不能解密。这么一看,似乎非对称加密已经能够解决通信安全方面的问题了,如图:

通过传输公钥来加密,以及通过私钥来解密达到了传输过程解决安全问题。但是非对称加密算法的效率是远不及对称算法的,如果存在大量的数据传输,那么非对称加密为了安全性就需要付出很大的低效成本,这对于当前互联网环境来说是不可接受的,那么如何解决效率问题呢?

3、混合使用解决安全和效率问题

我们可以这么思考,既然对称加密高效,非对称加密安全,那么我们能否设计一个流程同时利用这两个特性呢?

基于这个想法,我们想数据data通过对称加密,而需要用来解密数据的key通过非对称加密。到服务端以后,先解密key,然后再通过key对称解密大量数据的data,这样既解决了安全性问题,又解决了大量数据传输效率的问题。如图:

在上面这个思考过程中,我们从对称加密的不安全到解决非对称加密的效率,了解了https是如何实现安全通信的。

四、证书

上面的过程中,我们使用公钥私钥等来加密解密,但是这里面存在一个问题。客户端或者服务端如何知道对方是否是伪造的呢?

从现实生活中类比,如果你需要购买一颗钻石,但你怎么知道这颗钻石是否是真钻呢,为此你需要查看这颗钻石是否配有相应的证书。密钥也一样,密钥需要证书来证明它是可以被信任的。

这里的类比你可能会存在以下两个疑惑:

1、客户端或者浏览器等如何知道密钥是有效的可以被信任的?

其实浏览器之类的客户端内置了很多根证书,所以一个需要被验证的密钥会根据这些内置的根证书进行验证。如:Android已经将150+个CA证书内置在手机当中,这些证书被全世界所信赖。

2、它们又是如何知道证明密钥有效的证书是不是也是被伪造的呢?

在这里要先提及一个证书链的概念,如:

证书A是可信任的,证书A信任证书B,证书B信任证书C,根据这样的依托关系,那么证书B、C也是可信任的,这个即证书链。

所以当我们要验证证书是否有效的时候,只需要去验证证书是否在可信任的证书链当中即可。如:阿里云给你颁发了证书,那么它会在阿里云的证书链上去验证证书的有效性。所以如果是一个伪造的证书是无法进入证书链的,也就是无效的不被信任的证书。

参考文章:

http://www.songzhw.com/2016/09/13/how-does-https-work/

https://blog.csdn.net/wen303614/article/details/62422856

https如何工作的更多相关文章

  1. HTTPS的工作原理

    参考自<图解HTTP> 果壳网http://www.guokr.com/post/114121/ HTTPS的工作原理 增加了一层:HTTPS流程:应用层 HTTP->SSL/TLS ...

  2. HTTPS协议工作流程

    被问到了,复习一下HTTPS的工作流程 提到https,不得不提SSL SSL 1.        安全套接字(Secure Socket Layer,SSL)协议是Web浏览器与Web服务器之间安全 ...

  3. 理解 HTTPS 的工作原理

    目标读者:理解HTTP协议,对称和非对称加密,想要了解HTTPS协议的工作原理. 读完本文,你能明白 什么是HTTPS,TLS(SSL),TLS和HTTPS是什么关系? 什么是证书和数字签名,它们是如 ...

  4. [转载]HTTPS的工作原理

    HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息.TLS/SSL协议不仅仅是一套加密传输的协议,更是一件经过艺术家精心设计的艺 ...

  5. HTTPS协议工作原理(SSL数字证书)

    目录 HTTPS SSL协议的工作过程 SSL数字证书的查看 HTTPS 我们都知道HTTP协议是明文传输的,并且不能验证对方的身份,而且不能保证数据的完整性.而当我们在网络上进行购物电子交易时,电子 ...

  6. [TCP/IP] HTTPS的工作原理

    一.首先HTTP请求服务端生成证书,客户端对证书的有效期.合法性.域名是否与请求的域名一致.证书的公钥(RSA加密)等进行校验: 二.客户端如果校验通过后,就根据证书的公钥的有效, 生成随机数,随机数 ...

  7. https的工作流程

    (1)客户端向服务器提出请求,发出SSL握手信号. (2)服务器发出回应,并出示服务器证书(公钥),显示服务器站点身份. (3)客户端验证服务器证书,并生成一个随机的会话密钥,密钥长度达到128位. ...

  8. HTTPS工作原理

    HTTPS是什么 HTTPS全称为Hypertext Transfer Protocol over Secure Socket Layer,及以安全为目标的HTTP通道,简单说就是HTTP的安全版本. ...

  9. 网络数据传输安全及SSH与HTTPS工作原理

    本节内容 网络数据传输安全概述 数据加密算法分类 SSH工作原理 HTTPS工作原理 参考资料 个人一直在努力推动git在公司内部的普及和使用,前些日子在公司内部做了一次分享课,给大家介绍了下项目发布 ...

随机推荐

  1. Hibernate Update方法提交错误

    最近用通用Dao更新对象,报了以下错误 Row was updated or deleted by another transaction (or unsaved-value mapping was ...

  2. ubuntu设置root登录ssh

    1. 默认不带ssh,所以需要安装一下ssh sudo apt install openssh-server 2 .设置root密码,ubuntu默认root密码是随机的,需要重置一下 sudo pa ...

  3. “全栈2019”Java第七章:IntelliJ IDEA注释快捷键

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  4. Java_内存泄漏_实例1

    版权声明:本文为博主原创文章,转载请注明出处. 记一次压测时Java内存泄漏问题的发现过程(2017-08-14) [前篇] ①20170811进行A系统与B系统之间的会话功能进行压测,加上脚本准备期 ...

  5. CF666E Forensic Examination(后缀自动机+动态线段树)

    题意 给你一个串 $S$ 以及一个字符串数组 $T[1..m]$ , $q$ 次询问,每次问 $S$ 的子串 $S[p_l..p_r]$ 在 $T[l..r]$ 中的哪个串里的出现次数最多,并输出出现 ...

  6. jquery源码解析:jQuery静态属性对象support详解

    jQuery.support是用功能检测的方法来检测浏览器是否支持某些功能.针对jQuery内部使用. 我们先来看一些源码: jQuery.support = (function( support ) ...

  7. dbproxy-main函数

    main主函数 /home/id/lua.lua/home/id/lua-c/lua.lua/home/id/lua-c/metatable.lua/home/id/lua-c/1.lua int m ...

  8. loj #6570. 毛毛虫计数

    $ \color{#0066ff}{ 题目描述 }$ hsezoi 巨佬 olinr 喜欢 van 毛毛虫,他定义毛毛虫是一棵树,满足树上存在一条树链,使得树上所有点到这条树链的距离最多为 1. 给定 ...

  9. 基于windows fiber的协程(coroutine)实现

    一个非常简单,但是实用的协程实现,使用Windows的*Fiber函数族(linux可以稍微改一下用*context函数族). fco.h #ifndef _MSC_VER #error " ...

  10. App功能测试的注意点

    好几个月没有写博客记录学习心得了,这次回老家深夜闲来无事写一篇记录下这段时间的面试心得,这次面试过程很多面试官都问APP的有关测试,下面我就自己的认识和工作中的经验来谈谈自己对APP测试的认识: 1. ...