一、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. django重写form表单中的局部钩子函数

    from django import forms from django.core.exceptions import ValidationError from jax import models c ...

  2. 9w5:第九周程序填空题1

    描述 下面的程序输出结果是: 1 2 6 7 8 9 请填空: #include <iostream> #include <iterator> #include <set ...

  3. css3边角旋转

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. [Flex] 组件Tree系列 —— 实现右键拓展功能

    主程序mxml: <?xml version="1.0" encoding="utf-8"?> <!--功能描述:结合tree拓展右键功能 必 ...

  5. 全局CSS的配置

    /*公共部分开始*/ ::selection{ background-color: #3095fb; color: white; } ::moz-selection{ background-color ...

  6. 针对myeclipse6.5无法自动生成toString方法

    public void getToStringSTR(){ Field[] fs = this.getClass().getDeclaredFields(); for (int i = 0; i &l ...

  7. [软件工程]项目选择与NABCD模型分析

    项目 内容 这个作业属于哪个课程 2019春季计算机学院软件工程(罗杰) 这个作业的要求在哪里 团队项目选择 这课程的目标是 以实践形式熟悉软件开发流程,团队开发,合作学习 本次作业对课程的帮助是 确 ...

  8. [BZOJ4204] 取球游戏(期望)

    DarkBZOJ4204 (题面来源) [题目描述] 有\(m\)个球,一开始每个球均有一个初始标号,标号范围为\(1-n\)且为整数,标号为\(i\)的球有\(a_{i}\)个,并保证\(Σa_{i ...

  9. 基础篇:6.5)形位公差-基本规则 Basic Rules

    本章目的:述说形位公差的基本规则 1.代表规则的修正符号与使用情况: 使用情况举例: 2  有关术语 为了明确线性尺寸公差与形位公差之间关系,对尺寸术语将作进一步论述与定义. //无需强记,但希望现有 ...

  10. shevle模块

    什么是shevle模块 该模块用于序列化python中的数据,但是序列化已经有pickle了为什么出现了shevle? 因为shevle更加简单,封装了文件的读写操作.load和dump操作, 只有一 ...