前言

小伙伴们在面试过程中会遇到一些HTTPS相关问题

我大概收集整理了下

  1. 介绍HTTPS
  2. HTTP和HTTPS的区别
  3. HTTPS的加密过程
  4. HTTPS怎么建立安全通道
  5. 介绍SSL和TLS
这些问题我们都可以在以下文章中找到答案

http存在问题

  1. 被窃听:使用了明文
  2. 遇伪装:不验证通信方身份
  3. 遭篡改:无法证明报文完整性

问题解决

  1. 被窃听解决

    • 通信加密:通过和SSL或TLS的组合使用,加密通信内容
    • 内容加密:客户端对HTTP报文加密处理,(需要客户端和服务器端有加密和解密的机制)仍有风险
  2. 遇伪装解决

    • 查看证书:SSL提供证书手段
  3. 遭篡改解决

    • 完整性保护:https提供

HTTP + 加密 + 认证 + 完整性保护 = HTTPS

https简介

HTTPS 不是新协议,只是HTTP通信接口部分用SSL和TLS代替

HTTP + SSL = HTTPS

HTTPS : HTTP -> SSL -> TCP -> IP
HTTPS : HTTP -> TCP -> IP

加密

  1. 对称密钥加密(共享密钥加密):加密解密用同一个密钥

    • 密钥必须发给对方,过程中可能被窃听
  2. 非对称密钥加密(公开密钥加密):一把私有密钥(只有自己知道),一把公开密钥(任何人都可以知道)

    • 发送方用公开密钥加密,接收方用私有密钥解密
    • 处理速度较慢

HTTPS采用共享密钥加密公开密钥加密混合加密机制,保证处理速度和安全性

- 交换密钥阶段:     使用公开密钥加密 可以简单理解为加密的是共享密钥的公钥(保证安全)
- 建立通信交换报文: 使用共享密钥加密 加密的是通信的报文(保证速度)

认证

  1. 服务器 用自己的公开密钥登录证书认证机构
  2. 认证机构用自己的私有密钥向服务器的公开密码加数字签名 并颁发公钥证书
  3. 客户端拿到服务器的公钥证书,利用认证机构公开密钥(认证机构公开密钥已事先植入客户端),验证公钥证书的的数字签名,已确认服务器公开密钥的真实性
  4. 使用服务器的公开密钥加密报文发送
  5. 服务器用私有密钥解密报文

完整性保护

  1. 应用层发送数据时附加一种MAC的报文摘要,可查知报文是否被篡改

HTTPS安全通信流程

客户端支持的加密算法 = [A,B,C]

客户端随机数 = R1

服务端随机数 = R2

TLS四次握手

  1. Client Hello 客户端请求建立连接,向服务端发送(R1 + [A,B,C]
  2. Server Hello 服务端 回复(R2 + [A] + 证书(非对称加密公钥)
  3. Client Key Exchange 客户端 验证证书 然后通过 [A] -> key key + 非对称加密公钥 = 加密key 并发送(加密key
  4. Server Finish 服务端 利用 加密key + 非对称加密私钥 = 解密key
    同时利用 R1 + R2 + 解密key = 对称加密的密钥

    此后的HTTP链接数据传输即通过对称加密方式进行加密传输。

SSL和TLS

SSL 是一种安全传输协议,由于安全的原因SSL v1.0和SSL v2.0都没有公开,直到SSL v3.0。

TLS 是SSL v3.0的升级版,目前市面上所有的HTTPS都是用的是TLS,而不是SSL

为保证小伙伴们快速理解记忆,本文对HTTPS知识尽可能的做了简化处理,某些细节没有深究,望见谅

石头人汉考克
46 声望2 粉丝