文章目录
引言
- 昨天腾讯面试的时候,发现自己对于HTTPs并不是很了解,基本上只知道是加密版本的HTTP,但是具体的通信双方连接建立的具体方式还是不知道!能够使用什么样的加密算法也不是很清楚,今天作为一个补充,好好整理一下!
- BIBM应该是挂了,感觉自己的反应有点大,不应该以一篇文章的评审结果来评判自己,能够通过最好,不能通过也不能否定我整个人,我再根据他的投稿意见继续修改就行了!
- 信息来源------小林coding
正文
HTTPS简介
HTTP的缺陷引入
- HTTP因为是明文传输而且不需要证书认证,存在很多风险,具体如下
- 窃听风险:可以在通信链路上获取通信内容,如果涉及到个人隐私信息可能会泄露
- 篡改风险:可以修改网络传输的内容,强制植入一些垃圾广告,或者修改敏感信息
- 冒充风险 :冒充同名网站,盗取个人账号和密码或者资金
HTTPS解决方式------引入SSL/TLS协议
- 具体解决方式主要分为三部分
- 混合加密:实现信息加密
- 摘要算法:防止篡改
- 数字证书:禁止冒充
混合加密==》信息加密
- HTTPS采用了对称加密和非对称加密结合的混合加密方式。
对称加密方式说明
- 双方共享相同的密钥 对文件进行加密和解密操作。
- 发送方使用密钥对明文进行加密,生成密文
- 接收方使用相同的密钥对密文进行解密,恢复成明文
- 常见的算法
- DES、AES等
- 特性
- 安全性不高,一旦泄露,加密数据面临破解的风险
- 速度快,适合处理大量数据
- 实现原理
- 使用位运算速度快,使用硬件计算,速度回更快
非对称加密方式说明
- 使用一对不同的密钥进行加密和解密 的加密算法。密钥分为公钥和私钥。
- 公钥 :
- 可以公开给任何人
- 发送过程中,使用公钥对密文进行加密,生成密文
- 私钥 :
- 必须保密,私人持有
- 接受过程中,使用自己的私钥对密文进行解密,恢复成明文
- 公钥 :
- 常见算法
- RSA加密算法
- ECC加密算法
- 特性
- 安全性高,能够提供身份验证和数据完整性保护
- 加密和解密速度相对较慢,适合处理少量数据
- 实现原理
- 设计大数乘法或者大数模等运算,比较耗时
对称密钥加密快的原因
-
运算方式:
- 对称密钥主要是位运算,速度更快,如果使用硬件计算,速度更快
- 非对称密钥计算更加复杂,往往会涉及到大数乘法、大数模等
-
数据容量
- 相同强度下,对称加密需要的数据量更小。
- 对称加密一般是128位、256位
- 非对称加密一般是要2038位
HTTPS采用的是混合加密的方式
- 在通信建立前,采用非对称加密的方式交换对称密钥 ,后续不在使用
- 首先,服务器是同时拥有公钥和私钥,发送给客户端公钥
- 然后,客户端生成后续通信的对称密钥,通过公钥加密传输给服务器
- 最后,服务器通过手里的私钥进行解密,获得了后续对称密钥通信的密钥
- 在通信过程中,全部使用对称密钥的方式加密明文
摘要算法==》防止篡改
通俗理解
- 为了防止篡改,就给需要发送的摘要计算一个特殊标记值(这个标记值和摘要内容是一一对应的),然后的将这个一一对应的标记值,和内容一块发送给对方。
- 接收方收到后,会对摘要重新计算一个标记值,因为标记值是一一对应的,所以如果传输内容修改了,那么标记值就修改了,借此来比对内容是否发生了修改!
- 标记值生成规则
- 特殊标记和输入内容,一一对应
- 不可逆,无法通过特殊标记推导出输入内容
摘要算法
-
计算内容的哈希值,这个哈希值值特殊标记,无法通过哈希值推导出具体内容
-
发送数据的时候,发送的内容是:发送的内容 + 当前内容对应的哈希值
-
接收数据的时候,接受的内容是:接受的数据 + 接受的哈希值
- 比对是否发生了篡改
- 计算 接收的数据的哈希值 == 接受的哈希值
- 比对是否发生了篡改
-
弊端==》无法验证是否来自服务端
- 如果冒名者知道服务器的对称加密的私钥,但是不知道非对称加密的私钥,就可以替换内容
- 直接替换 传输内容 + 特殊标记
数字签名==》确认身份
- 服务器用手上非对称加密的私钥,对计算出来的特殊标记进行加密,生成数字签名
- 发送内容:传输内容 + 私钥加密(哈希值计算(传输内容))的数字签名
数字证书==》禁止冒充
- 如果中间截胡,给你发送了一对伪造的私钥和公钥,那么就可以伪造服务器和客户端通信了!必要验证你发过来的公钥是合法的,这就引入第三方机构!
数字证书简介
- 这里会将 【个人信息 + 公钥 + 数字签名 】 发送给第三方机构CA ,第三方机构使用它的密钥进行加密,生成【数字证书】,发送给客户端。
- 客户端收到之后,会将【数字证书 】的向第三方机构验证证书的合法性,
- 第三方机构会进行解密,揭秘成功会发送给客户端对应公钥
具体实现
-
1、注册公钥
- 服务器 将自己的公钥注册到CA
- CA用自己的私钥,将服务器的公钥数字签名【数据内容 》哈希值》 数字签名 】进行加密,并颁发数字证书
- 客户端 保存CA的公钥的到浏览器中
- 客户端收取到信息之后,会使用公钥进行解密,进行验证判定对应数字证书是否合法。
- 服务器 将自己的公钥注册到CA
-
2、信息交互
- 服务器 将数字证书发送到客户端,这其中包含了对应的非对称加密的公钥
- 客户端接收到了对应公钥之后,将对称加密的私钥加密发送给服务端
具体流程如下
HTTPS建立连接过程------RSA密钥交换算法
SSL\TLS协议的基本流程
- 验证公钥
- 客户端向服务器索要并验证服务器的公钥
- 协商私钥
- 双方协商生产会话密钥
- 密钥通信
- 双方采用的会话密钥进行通信
前两步是TLS握手阶段
- TLS的握手阶段涉及4次通信,使用不同的密钥交换算法, 主要的有两种
- RSA算法
- ECDHE算法
TLS四次握手过程(以RSA为例)
-
第一次握手==》Cilent hello
- 客户端发起的Client Hello信息,包括如下信息
- TLS版本号
- 支持的密码套件
- 客户端生成的随机数A(后续用来生成的对称密钥元素之一)
- 客户端发起的Client Hello信息,包括如下信息
-
第二次握手==》Server Hello
- 服务端回复客户端发起的hello信息==》Server Hello ,包含如下信息
- TSL版本号
- 密码套件
- 服务端生成的随机数B(后续用来生成的对称密钥元素之一)
- 发送身份证明==》Certificate
- 数字证书证明他的身份
- Server Hello Done打招呼结束
- 第二次握手信息全部发送完毕
- 服务端回复客户端发起的hello信息==》Server Hello ,包含如下信息
-
第三次握手==》Client key Exchange关键字交换
- 准备==》校验证书
- 拿到服务端的Certificate,会使用CA的公钥进行解密验证,获取服务端的公钥
- 加密随机数
- 客户端生成随机数C(后续用来生成的对称密钥元素之一)
- 通过公钥进行加密传输给服务端
- 通话信息总结
- 使用三个随机数生成对称密钥,并对之前的信息进行摘要验证对称密钥
- 准备==》校验证书
-
第四次握手==》服务器验证
- 服务器使用三个随机数字生成对称密钥,
- 对已有数据做一个摘要,并使用对称密钥进行通信验证。
双方都没问题,握手结束!!
上述密钥交换算法使用较少,不具备前向安全的性质
HTTPS建立连接过程------ECDHE密钥交换算法
离散对数
- f(a) = b,知道a很好求b,然后无法根据b反推出a,现有计算机做不到,是非对称的。
- b作为公钥,a作为私钥
- 知道了公钥也猜不出私钥
DH算法
- 基于离散对数的密钥交换算法
DHE算法
- 基于动态的随机生成密钥的密钥交换算法
ECDHE
- 使用圆锥曲线去指导生成对应密钥的算法
- 优势
- 生成的密钥更快、更安全
ECDHE四次握手
-
第一次握手==》Client Hello
- 客户端发送的Client Hello握手信息,包括的
- TLS版本号
- 密码套接字
- 随机数A
- 客户端发送的Client Hello握手信息,包括的
-
第二次握手==》Server Hello
- TLS版本号
- 密码套接字
- 随机数B
- 验证证书Certificate
- Server Key Exchange 注意,不同于RSA,这里是服务器生成key的
- 交换跟椭圆曲线的相关信息
-
第三次握手==》Client Key Exchange
- 验证证书合法性
- 生成客户端椭圆曲线公钥
- 【客户端随机数 + 服务端随机数 + x】生成对称密钥
- Change Cliper Spec
- 告知对方后续使用加密算法通信
- Excrypted Handshake Message
- 使用之前发送的数据做一个摘要验证
- 当前阶段可以直接使用对称密钥进行通信了!
-
TLS四次握手
- Change Cliper Spec
- 告知对方后续使用加密算法通信
- Excrypted Handshake Message
- 使用之前发送的数据做一个摘要验证
- Change Cliper Spec
RSA和ECDHE握手区别
- RSA不具备前向保密,ECDHE支持前向保密
- ECDHE可以只需要进行三次握手就能发送信息,RSA必须要四次才行
- 第二次握手,ECDHE中服务端会发送Server Exchange Key,RSA没有该过程
面试题目
HTTP和HTTPS有什么区别
- 安全性 :
- HTTP是明文传输,HTTPS是加密传输
- 建立连接的方式
- HTTP是三次TCP握手即可,HTTPS需要在此基础上增加SSL/TLS四次握手
- 证书
- HTTPS需要CA证书验证身份
了解过那些加密算法
- 对称加密算法,加密解密用相同密钥,快
- AES
- 非对称加密算法,两个密钥,公钥私钥,各有不同。公钥加密私钥解密,传输敏感信息;私钥加密公钥解密,验证用户信息
- ECDHE、RSA
- 哈希算法,完整性校验
- MD5
对称加密和非对称加密是什么?各自有哪些算法?
对称加密
- 加密解密使用同一个密钥,速度快,适合大文件传输
- AES、DES
非对称加密 - 两个不同的密钥,公钥公开,私钥保密,加密较慢。公钥加密对称密钥进行传输
- RSA、DHE、ECDHE
假设有一个文件,大小未知,现在要把它上传到云端,使用对称加密还是非对称加密?
- 对称加密
- 速度快,在相同保密强度在,使用的数据更少
HTTPS建立过程是怎么样?
- TCP三次握手
- TSL/SSL四次握手
-
第一次握手
- Client Hello
- 发送如下信息
- TLS版本号
- 密码套接字
- 随机数A
-
第二次握手
- Server Hello
- 发送如下信息
- TLS版本号
- 密码套接字
- 随机数B
- 数字证书
- 公钥
- Server Done
- 信息发送完毕
-
第三次握手
- 验证certificate
- 生成随机数
- 生成对称密钥,并生成摘要,开始使用对称密钥进行通信,请服务器进行验证
-
第四次握手
- 服务器执行相同操作
-
简陋了点,不过我觉得把三次随机数、CA等关键信息说出来,应该可以应付面试了!
为什么需要三个随机数?
- 伪随机数,容易被破解,三个伪随机数,近似真实随机数
一次HTTPS需要几个RTT
- 两个,总共有四次握手
SSL握手流程为什么要使用非对称加密
- 因为需要安全传输对称加密的密钥
为什么HTTPS不用非对称加密的算法加密HTTP报文
- HTTP报文耗时,加密解密慢,HTTP传输的数据一般比较大
HTTPS会对URL加密吗?
- 会,HTTPS是对整个报文进行加密,URL是报文头里面的
CA机构如何验证Server身份?
- 服务端向CA申请证书的时候,CA会使用自己的私钥对服务器的一些信息加密,生成数字签名,然后HTTPS握手的时候,服务端传输给客户端,客户端自己的已经存了CA的公钥,进行解密验证是否可信的。
证书是绿色是什么意思?
- CA校验成功,证书是可信的。
总结
- 这里整理的比较粗浅,关于HTTPS中的ECDHE握手并不了解,尤其是他的加密算法还不是很了解,但是我看面试很少问,上述的基本回答已经够我应付面试了,下次再遇到类似的问题,基本能够通过了!
- 后面还有一些问题,加油,继续整理!