秋招突击——8/16——知识补充——HTTPS的介绍

文章目录

引言

  • 昨天腾讯面试的时候,发现自己对于HTTPs并不是很了解,基本上只知道是加密版本的HTTP,但是具体的通信双方连接建立的具体方式还是不知道!能够使用什么样的加密算法也不是很清楚,今天作为一个补充,好好整理一下!
  • BIBM应该是挂了,感觉自己的反应有点大,不应该以一篇文章的评审结果来评判自己,能够通过最好,不能通过也不能否定我整个人,我再根据他的投稿意见继续修改就行了!
  • 信息来源------小林coding

正文

HTTPS简介

HTTP的缺陷引入

  • HTTP因为是明文传输而且不需要证书认证,存在很多风险,具体如下
    • 窃听风险:可以在通信链路上获取通信内容,如果涉及到个人隐私信息可能会泄露
    • 篡改风险:可以修改网络传输的内容,强制植入一些垃圾广告,或者修改敏感信息
    • 冒充风险 :冒充同名网站,盗取个人账号和密码或者资金
      HTTPS解决方式------引入SSL/TLS协议
  • 具体解决方式主要分为三部分
    • 混合加密:实现信息加密
    • 摘要算法:防止篡改
    • 数字证书:禁止冒充
混合加密==》信息加密
  • HTTPS采用了对称加密和非对称加密结合的混合加密方式

对称加密方式说明

  • 双方共享相同的密钥 对文件进行加密和解密操作。
    • 发送方使用密钥对明文进行加密,生成密文
    • 接收方使用相同的密钥对密文进行解密,恢复成明文
  • 常见的算法
    • DES、AES等
  • 特性
    • 安全性不高,一旦泄露,加密数据面临破解的风险
    • 速度快,适合处理大量数据
  • 实现原理
    • 使用位运算速度快,使用硬件计算,速度回更快

非对称加密方式说明

  • 使用一对不同的密钥进行加密和解密 的加密算法。密钥分为公钥和私钥。
    • 公钥
      • 可以公开给任何人
      • 发送过程中,使用公钥对密文进行加密,生成密文
    • 私钥
      • 必须保密,私人持有
      • 接受过程中,使用自己的私钥对密文进行解密,恢复成明文
  • 常见算法
    • RSA加密算法
    • ECC加密算法
  • 特性
    • 安全性高,能够提供身份验证和数据完整性保护
    • 加密和解密速度相对较慢,适合处理少量数据
  • 实现原理
    • 设计大数乘法或者大数模等运算,比较耗时

对称密钥加密快的原因

  • 运算方式

    • 对称密钥主要是位运算,速度更快,如果使用硬件计算,速度更快
    • 非对称密钥计算更加复杂,往往会涉及到大数乘法、大数模等
  • 数据容量

    • 相同强度下,对称加密需要的数据量更小。
    • 对称加密一般是128位、256位
    • 非对称加密一般是要2038位

HTTPS采用的是混合加密的方式

  • 在通信建立前,采用非对称加密的方式交换对称密钥 ,后续不在使用
    • 首先,服务器是同时拥有公钥和私钥,发送给客户端公钥
    • 然后,客户端生成后续通信的对称密钥,通过公钥加密传输给服务器
    • 最后,服务器通过手里的私钥进行解密,获得了后续对称密钥通信的密钥
  • 在通信过程中,全部使用对称密钥的方式加密明文
摘要算法==》防止篡改

通俗理解

  • 为了防止篡改,就给需要发送的摘要计算一个特殊标记值(这个标记值和摘要内容是一一对应的),然后的将这个一一对应的标记值,和内容一块发送给对方。
  • 接收方收到后,会对摘要重新计算一个标记值,因为标记值是一一对应的,所以如果传输内容修改了,那么标记值就修改了,借此来比对内容是否发生了修改!
  • 标记值生成规则
    • 特殊标记和输入内容,一一对应
    • 不可逆,无法通过特殊标记推导出输入内容

摘要算法

  • 计算内容的哈希值,这个哈希值值特殊标记,无法通过哈希值推导出具体内容

  • 发送数据的时候,发送的内容是:发送的内容 + 当前内容对应的哈希值

  • 接收数据的时候,接受的内容是:接受的数据 + 接受的哈希值

    • 比对是否发生了篡改
      • 计算 接收的数据的哈希值 == 接受的哈希值
  • 弊端==》无法验证是否来自服务端

    • 如果冒名者知道服务器的对称加密的私钥,但是不知道非对称加密的私钥,就可以替换内容
    • 直接替换 传输内容 + 特殊标记

数字签名==》确认身份

  • 服务器用手上非对称加密的私钥,对计算出来的特殊标记进行加密,生成数字签名
  • 发送内容:传输内容 + 私钥加密(哈希值计算(传输内容))的数字签名
数字证书==》禁止冒充
  • 如果中间截胡,给你发送了一对伪造的私钥和公钥,那么就可以伪造服务器和客户端通信了!必要验证你发过来的公钥是合法的,这就引入第三方机构!

数字证书简介

  • 这里会将 【个人信息 + 公钥 + 数字签名 】 发送给第三方机构CA ,第三方机构使用它的密钥进行加密,生成【数字证书】,发送给客户端。
  • 客户端收到之后,会将【数字证书 】的向第三方机构验证证书的合法性,
    • 第三方机构会进行解密,揭秘成功会发送给客户端对应公钥

具体实现

  • 1、注册公钥

    • 服务器 将自己的公钥注册到CA
      • CA用自己的私钥,将服务器的公钥数字签名【数据内容 》哈希值》 数字签名 】进行加密,并颁发数字证书
    • 客户端 保存CA的公钥的到浏览器中
      • 客户端收取到信息之后,会使用公钥进行解密,进行验证判定对应数字证书是否合法
  • 2、信息交互

    • 服务器 将数字证书发送到客户端,这其中包含了对应的非对称加密的公钥
    • 客户端接收到了对应公钥之后,将对称加密的私钥加密发送给服务端

具体流程如下

HTTPS建立连接过程------RSA密钥交换算法

SSL\TLS协议的基本流程

  • 验证公钥
    • 客户端向服务器索要并验证服务器的公钥
  • 协商私钥
    • 双方协商生产会话密钥
  • 密钥通信
    • 双方采用的会话密钥进行通信

前两步是TLS握手阶段

  • TLS的握手阶段涉及4次通信,使用不同的密钥交换算法, 主要的有两种
    • RSA算法
    • ECDHE算法

TLS四次握手过程(以RSA为例)

  • 第一次握手==》Cilent hello

    • 客户端发起的Client Hello信息,包括如下信息
      • TLS版本号
      • 支持的密码套件
      • 客户端生成的随机数A(后续用来生成的对称密钥元素之一)
  • 第二次握手==》Server Hello

    • 服务端回复客户端发起的hello信息==》Server Hello ,包含如下信息
      • TSL版本号
      • 密码套件
      • 服务端生成的随机数B(后续用来生成的对称密钥元素之一)
    • 发送身份证明==》Certificate
      • 数字证书证明他的身份
    • Server Hello Done打招呼结束
      • 第二次握手信息全部发送完毕
  • 第三次握手==》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
  • 第二次握手==》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
      • 使用之前发送的数据做一个摘要验证

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握手并不了解,尤其是他的加密算法还不是很了解,但是我看面试很少问,上述的基本回答已经够我应付面试了,下次再遇到类似的问题,基本能够通过了!
  • 后面还有一些问题,加油,继续整理!
相关推荐
刽子手发艺2 小时前
WebSocket详解、WebSocket入门案例
网络·websocket·网络协议
速盾cdn6 小时前
速盾:CDN是否支持屏蔽IP?
网络·网络协议·tcp/ip
网络安全-老纪12 小时前
iOS应用网络安全之HTTPS
web安全·ios·https
Lws16 小时前
CS144 lab0(个人理解)
网络协议
C++忠实粉丝20 小时前
计算机网络socket编程(2)_UDP网络编程实现网络字典
linux·网络·c++·网络协议·计算机网络·udp
添砖java_85720 小时前
UDP数据报套接字编程
网络·网络协议·udp
lxkj_20241 天前
修改ffmpeg实现https-flv内容加密
网络协议·https·ffmpeg
千羽星弦1 天前
Apache和HTTPS证书的生成与安装
网络协议·https·apache
程序猿小D1 天前
第三百三十节 Java网络教程 - Java网络UDP服务器
java·开发语言·网络·网络协议·udp·多线程