深入理解Https如何保证通信安全
作为一名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://www.cnblogs.com/chenxf1117/p/15127479.html
- Spring Boot下的TDD(测试驱动开发)
- MySQL的索引是什么?怎么优化?
- C语言之函数
- ElasticSearch搜索引擎在SpringBoot中的实践
- 消费者驱动的微服务契约测试套件Spring Cloud Contract
- 使用Spring Boot开发一个Spring Mobile程序
- Spring Cloud中Hystrix 线程隔离导致ThreadLocal数据丢失
- 内网穿透工具-ittun
- Elastic-Job-Spring-Boot-Starter简化你的任务配置
- Spring Boot处理REST API错误的正确姿势
- C语言之位运算
- C语言之预处理命令与用typedef命名已有类型
- spring-data-mongodb之MongoTemplate 删除操作
- 总结了一些指针易出错的常见问题(六)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法