作为一名ABC搬运工,我相信很多人都知道Https,也都知道它是用来保证通信安全的,但是如果你没有深入了解过Https,可能并不知道它是如何保证通信安全的。我也是借着这次机会,和大家分享下我深入了解的一个过程。

本文主要带着以下几个问题进行探讨:

1、什么是Https?

2、Https和Http有什么区别?

3、Https是如何保证通信安全的,它解决了哪些问题?

1.离不开的Https基础理论

HTTPS是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。

通过上面的定义,我们关注到两点:传输加密、身份认证。那我们先来了解下Https中将要用到的加密技术和认证技术。

1)对称加密

加密数据,需要秘钥对(加密秘钥和解密秘钥),对称加密很容易理解,即:通信双方分别持有的加密秘钥和解密秘钥是一样的。

2)非对称加密

非对称加密从字面上理解,即:通信双方分别持有的加密秘钥和解密秘钥是不一样的。我们将私人持有的秘钥称为私钥,将公开的允许大多数人持有的秘钥称为公钥,现实场景中,通常是使用公钥加密通信数据,然后私钥解密保证数据安全性。

3)数字签名

保证数据传输的完整性和发送方可信。数字签名是非对称密钥加密技术与数字摘要技术的应用,通常使用hash算法对数据进行数字摘要(生成一段唯一的数据标识,该过程不可逆),然后使用私钥对数字摘要进行加密;接收方收到数据后,使用发送放提供的公钥对数据解密,确保数据是发送方发送的(如果不能解密,说明发送方并不是真实的),然后使用相同的hash算法对解密的数据进行数字摘要,比较前后两次数字摘要信息,如果相同则说明数据未被修改,从而确保数据完整性。

4)数字证书

数字证书又称数字标识,由用户申请,证书签证机关CA对其核实签发,对用户的公钥认证。前面提到的几种技术都是在发送方正确的情况下所做的加密认证技术,然而当发送方本身就是伪造的,那么后续的加密认证必然没有意义。而证书签证机构一般都是权威机构,通过其签发的证书确保了发送方提供的公钥是可信的。

上面的理论描述可能理解起来不是很直接,大家可以继续跟着后面的分析过程,逐步渗透理解。

2.和Http区别

Https和Http的区别,我们在这里不做详细描述,主要通过一张图了解一下:

通过上图我们可以直观的发现,HTTPS是在HTTP的基础上加了SSL安全协议层,通俗的理解HTTPS=HTTP+SSL,SSL安全协议保证了通信过程的安全性。

主要体现在以下几方面:

1)信息加密安全

2)信息完整性

3)身份认证

3.如何保证通信安全

我们先来看下HTTP的一次数据通信过程。TCP建立连接和断开连接的过程,这里就不再描述了。

图一

存在的安全性问题:

1)图一过程①和②都有可能被黑客截取,用户的信息暴露,非常危险。

HTTPS为了解决这个问题,允许通信双方共同约定一种加解密方式,即对称加密技术,仅通信双方知晓密钥以确保传输数据的安全;可是依然存在一个问题:通行双方如何交互这个密钥呢?

于是又提出通过非对称加密技术实现密钥的交互,即服务端向客户端提供自己的公钥,然后客户端通过公钥加密秘钥传输给服务端,服务端收到后使用私钥解密,获取密钥,后续通信双方通过该对称密钥进行通信。

图二

2)图二中的过程②,如果被黑客拦截会发生什么?

黑客可以伪造成服务器,将黑客自己的公钥分发给客户端,也就是说“服务器”本身就是个假的,这样的话图二中过程③客户端加密的密钥就很容易被黑客获取,显然后续的通信过程一直被黑客监听,信息完全暴露。

HTTPS为了解决这个问题提出了“数字证书”,由于数字证书是权威机构颁发的,申请者需要提交很多资料审核,正常情况下伪造者很难申请到证书,因此也就保证了服务端提供的公钥是安全可信的。

图三

3)图三中的过程②颁发的证书,被黑客拦截篡改怎么办?

如果证书被黑客拦截了。虽然黑客拿着证书也没啥用,但是万一黑客捣乱把证书信息篡改了,那么客户端接收后就根本不知道了,同样存在安全隐患。

所以,CA机构在生成证书的时候就使用了“数字签名”,保证了证书的完整性。

原理:CA机构使用Hash算法得到证书明文信息的“信息摘要”,然后使用自己的私钥对“信息摘要”加密,生成数字签名一同放在数字证书中;当客户端收到服务器发送的证书时,可以通过证书中的Hash算法对证书信息签名得到“信息摘要”,然后使用CA机构的公钥对原证书中的签名信息解密,如果解密后的“信息摘要”和自签名得到的一致,则说明没问题。(CA机构一般都是权威性的,所以通常它的公钥都是内置在客户端系统中的)

4)同样的问题,客户端和服务端在通信过程中,虽然黑客没有“会话密钥”无法获取真实的传输信息,但是黑客可以“修改数据”,比如删除一段信息,这样通信双方拿到数据后,并不知道数据被修改了。

HTTPS为了保证数据的完整性,同样使用了“数字签名”,使用的是HMAC算法进行签名,保证了通行过程中的信息完整性。

至此,HTTPS已经帮我们实现了通信双方之间的安全通信。

深入理解Https如何保证通信安全的更多相关文章

  1. 理解 HTTPS 的工作原理

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

  2. 一分钟理解 HTTPS 到底解决了什么问题

    本文原作者“虞大胆的叽叽喳喳”,原文链接:jianshu.com/p/8861da5734ba,感谢原作者. 1.引言 很多人一提到 HTTPS,第一反应就是安全,对于普通用户来说这就足够了: 但对于 ...

  3. 如果这样来理解HTTPS,一篇就够了!

    1.前言 可能有初学者会问,即时通讯应用的通信安全,不就是对Socket长连接进行SSL/TLS加密这些知识吗,干吗要理解HTTPS协议呢. 这其实是个误解:当今主流的移动端IM数据通信,总结下来无外 ...

  4. java-信息安全(九)-基于DH,非对称加密,对称加密等理解HTTPS

    概述 java-信息安全(七)-基于非对称加密,对称加密等理解HTTPS 如果想要理解好https,请尽量了解好以上信息等. 参看文章: http://www.ruanyifeng.com/blog/ ...

  5. HTTPS 如何保证数据传输的安全性

    为什么需要 HTTPS? 我们知道 HTTP 是一个纯文本传输协议,对传输过程中的数据包不进行加密,是明文传输,那这样的话对于介于在发送端和接收端之间的任何 一个节点都能知道传输的内容,这些节点可能是 ...

  6. 轻松理解https,So easy!

    Java技术栈 www.javastack.cn 优秀的Java技术公众号 作者:翟志军 https://showme.codes/2017-02-20/understand-https/ 本文尝试一 ...

  7. 接口测试之深入理解HTTPS

    前言 随着网络安全问题越来越被重视,HTTPS协议的使用已经逐渐主流化.目前的主流站点均已使用了HTTPS协议:比如:百度.淘宝.京东等一二线主站都已经迁移到HTTPS服务之上.而作为测试人员来讲,也 ...

  8. HTTPS 怎样保证数据传输的安全性

    大家都知道,在客户端与服务器数据传输的过程中,HTTP协议的传输是不安全的,也就是一般情况下HTTP是明文传输的.但HTTPS协议的数据传输是安全的,也就是说HTTPS数据的传输是经过加密的. 在客户 ...

  9. 一文看懂https如何保证数据传输的安全性的【转载、收藏】

    一文看懂https如何保证数据传输的安全性的   一文看懂https如何保证数据传输的安全性的 大家都知道,在客户端与服务器数据传输的过程中,http协议的传输是不安全的,也就是一般情况下http是明 ...

随机推荐

  1. 50、django工程(ajax)

    50.1.ajax介绍: 1.ajax是在不跳转当前url地址的情况偷偷的往后台发送数据做增删改数据的操作,如果成功返回结果刷新当前页面,失败则提醒, 使用 id 或 name 属性. 2.模态对话框 ...

  2. Java核心反射机制

    Java核心反射机制: 基本反射: 反射是一种动态类的处理机制,通过Class类来实现反射机制: Class类的基本信息: Module java.base Package java.lang Cla ...

  3. Center OS 7 通过Docker部署yapi

    Center OS 7 通过Docker部署yapi 版本要求 Linux Center OS 7 安装Docker #Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前 ...

  4. CentOS-常用命令(版本:7.x)

    常用命令 注:centos命令不定期持续更新,希望能够帮到你~ 修改主机名 $ hostnamectl set-hostname xxx 查看IP $ vim /etc/sysconfig/netwo ...

  5. 25 Linux中的信号

    Linux中的信号 信号是进程在运行过程中,由自身产生或由进程外部发过来的消息(事件).每个信号用一个整型常量宏表示,以SIG开头,比如SIGCHLD.SIGINT等,它们在系统头文件中定义,也可以通 ...

  6. bugkuCTF

    这题说实话我一脸懵逼,计网还没学的我,瑟瑟发抖,赶紧去百度. 思路分析: 涉及到域名解析,也就是dns服务,看了看writeup,都是修改host文件,百度了下host文件的作用,才明白了 host文 ...

  7. Leetcode No.108 Convert Sorted Array to Binary Search Tree(c++实现)

    1. 题目 1.1 英文题目 Given an integer array nums where the elements are sorted in ascending order, convert ...

  8. 测试基础(三) Jmeter安装

    前言 JMeter是Apache组织开发的基于Java的压力测试工具,用于对软件做压力测试. 进入Jmeter官网:https://jmeter.apache.org/,进行Jmeter压缩包的下载. ...

  9. [刘阳Java]_JdbcTemplate用法_第11讲

    JdbcTemplate模板提供操作数据库的方法应用,下面我们来说一下它的用法(注意:建议大家结合Spring API文档学习效果更好,因为下面的代码只是"抱砖引玉") 1. 遵循 ...

  10. Day10 类与对象-面向对象编程(1)

    面向对象编程(OOP) 面向对象编程的本质就是:以类的方式组织代码,以对象的组织(封装)数据. 抽象 三大特征: 封装 继承 多态 从认识论角度考虑是先有对象后有类.对象,是具体的事物.类,是抽象的, ...