Home
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 设计模式
  • JavaSE
  • JVM
  • JUC
  • Netty
  • CPP
  • QT
  • UE
  • Go
  • Gin
  • Gorm
  • HTML
  • CSS
  • JavaScript
  • vue2
  • TypeScript
  • vue3
  • react
  • Spring
  • SpringMVC
  • Mybatis
  • SpringBoot
  • SpringSecurity
  • SpringCloud
  • Mysql
  • Redis
  • 消息中间件
  • RPC
  • 分布式锁
  • 分布式事务
  • 个人博客
  • 弹幕视频平台
  • API网关
  • 售票系统
  • 消息推送平台
  • SaaS短链接系统
  • Linux
  • Docker
  • Git
GitHub (opens new window)
Home
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 设计模式
  • JavaSE
  • JVM
  • JUC
  • Netty
  • CPP
  • QT
  • UE
  • Go
  • Gin
  • Gorm
  • HTML
  • CSS
  • JavaScript
  • vue2
  • TypeScript
  • vue3
  • react
  • Spring
  • SpringMVC
  • Mybatis
  • SpringBoot
  • SpringSecurity
  • SpringCloud
  • Mysql
  • Redis
  • 消息中间件
  • RPC
  • 分布式锁
  • 分布式事务
  • 个人博客
  • 弹幕视频平台
  • API网关
  • 售票系统
  • 消息推送平台
  • SaaS短链接系统
  • Linux
  • Docker
  • Git
GitHub (opens new window)
  • HTTP

    • Get 与 Post
    • 状态码&字段
    • 输入URL到返回页面全过程
    • HTTP
    • HTTP演进
    • HTTPS
      • 与HTTP区别?
      • HTTPS解决了HTTP明文传输哪些风险?
      • HTTPS解决方案
        • 混合加密
        • 摘要算法+数字签名
        • 数字证书
      • 密钥交换算法
      • HTTPS优化
    • WebSocket
    • RPC
    • 粘包问题
    • Java中的网络请求
    • 请求报文与响应报文
    • HTTP如何保存用户状态
    • 长连接与短连接
    • SSL TLS
  • TCP

  • UDP

  • IP

  • 网络安全

  • 计算机网络
  • HTTP
Nreal
2023-11-23
目录

HTTPS

# 与HTTP区别?

  • HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。
  • HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。
  • 两者的默认端口不一样,HTTP 默认端口号是 80,HTTPS 默认端口号是 443。
  • HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。

# HTTPS解决了HTTP明文传输哪些风险?

  • 窃听风险:通信使用明文(不加密),内容可能会被窃听。比如,账号信息容易泄漏,那你号没了。
  • 冒充风险:不验证通信方的身份,因此有可能遭遇伪装。比如,访问假的淘宝、拼多多,那你钱没了。
  • 篡改风险:无法证明报文的完整性,所以有可能已遭篡改。比如,网页上植入垃圾广告,视觉污染,眼没了。

# HTTPS解决方案

  • 混合加密的方式实现信息的机密性,解决了窃听的风险。
  • 摘要算法的方式来实现完整性,它能够为数据生成独一无二的「指纹」,指纹用于校验数据的完整性,解决了篡改的风险。
  • 将服务器公钥放入到数字证书中,解决了冒充的风险。

# 混合加密

HTTPS 采用的是对称加密和非对称加密结合的「混合加密」方式

  • 在通信建立前采用非对称加密的方式交换「会话秘钥」,后续就不再使用非对称加密。
  • 在通信过程中全部使用对称加密的「会话秘钥」的方式加密明文数据。

采用「混合加密」的方式的原因:

  • 对称加密只使用一个密钥,运算速度快,密钥必须保密,无法做到安全的密钥交换。
  • 非对称加密使用两个密钥:公钥和私钥,公钥可以任意分发而私钥保密,解决了密钥交换问题但速度慢。

客户端从CA获得服务器公钥,RSA服务器对公钥加密pre-master发送给服务端,服务端私钥解密取出pre-master,用premaster+客户端随机数+服务端随机数生成会话密钥,后续的对称加密都用这个会话密钥;

# 摘要算法+数字签名

摘要算法:(消息完整性)用摘要算法(哈希函数)来计算出内容的哈希值,也就是内容的「指纹」,这个哈希值是唯一的,且无法通过哈希值推导出内容;

通过哈希算法可以确保内容不会被篡改,但是并不能保证「内容 + 哈希值」不会被中间人替换,因为这里缺少对客户端收到的消息是否来源于服务端的证明

(请假条有请假内容和家长签字,然是签字可能伪造)

(服务端发送的哈希值被别人篡取,但是修改了内容,客户端不知道,只比较哈希值)

数字签名:(消息来源可靠性)通过非对称加密(服务端私钥加密,客户端公钥解密),确认消息身份;私钥加密的是对内容的哈希值;

(签字伪造,需要打电话跟家长确认)

公钥与私钥可以双向加解密,可以用公钥加密内容,然后用私钥解密,也可以用私钥加密内容,公钥解密内容;

  • 公钥加密,私钥解密。这个目的是为了保证内容传输的安全,因为被公钥加密的内容,其他人是无法解密的,只有持有私钥的人,才能解密出实际的内容;
  • 私钥加密,公钥解密。这个目的是为了保证消息不会被冒充,因为私钥是不可泄露的,如果公钥能正常解密出私钥加密的内容,就能证明这个消息是来源于持有私钥身份的人发送的。

img

# 数字证书

保证服务器公钥身份,解决冒充风险;

数字证书有什么?

公钥,文件的数字签名及使用算法,有效期等;

服务器将自己的公钥注册到CA;

CA用自己的私钥将服务器的公钥数字签名并颁发数字证书(服务器公钥+CA数字签名);

客户端拿到服务器的数字证书后,使用CA公钥确认服务器的数字证书的真实性,从数字证书获取服务器公钥后,使用它对报文加密后发送;

服务器用私钥对报文解密;

服务端一般私钥加密发送,客户端公钥解密,保证消息不被冒充;

客户端公钥加密发送,服务端私钥解密,保证传输安全;

数子证书工作流程

# 密钥交换算法

RSA

ECDHE

# HTTPS优化

  1. 密钥交换算法优化
  2. 证书优化
  3. 会话重用
HTTP演进
WebSocket

← HTTP演进 WebSocket→

Theme by Vdoing | Copyright © 2021-2024
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式