石头人面试HTTP之https

前言

小伙伴们在面试过程当中会遇到一些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代替code

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知识尽量的作了简化处理,某些细节没有深究,望见谅
相关文章
相关标签/搜索