📖
blog
  • README
  • JavaScript
    • 元素的宽高位置信息梳理
    • dom-align 源码浅析
    • Event Loop
    • 函数实参为对象时的陷阱
    • export 与 utils 方法书写规范
    • 手写 Promise 及相关代码理解
    • call,apply,bind 等函数的模拟实现
    • JavaScript继承
    • JavaScript 数据类型与类型判断
    • for..of 和 for..in 的区别
    • 写给自己看的 next 函数
    • JS 可选链与双问号
    • mouseenter 与 mouseover 事件的区别
    • Immutable相关知识
  • CSS
    • 不简单的 z-index
    • 两列布局,三列布局
    • CSS 居中方案整理
    • CSS 像素,设备像素,2倍图梳理
    • iconfont 的使用
  • Node JS
    • 实现简易的 express
  • React 核心知识点整理
    • 高阶组件
    • React 事件处理
    • React Hooks
    • React Context
  • React 状态管理
    • Redux 基础概念
    • Redux 中间件和异步操作
    • Redux Saga
    • Redux 只能有一个 store 对象嘛
  • React 开发实践
    • Ant Design Menu 组件的使用与深入
    • 讲讲吸顶效果与 react sticky
    • 基于 express,搭建 react 的开发环境
    • 通过 antd input 组件分析受控与非受控组件
    • DebounceClick 组件
    • react component Align 组件分析
    • React Portal 之事件冒泡
    • React Transition Group 源码浅析
    • React.cloneElement 父组件向子组件注入 props
    • 一次 Align 组件的问题记录
    • 如何知道子组件的类型
    • React Router 源码简单分析
    • React Redux 源码简单分析
  • Vue.js
    • Vue.js 概览
    • scoped 样式中的 deep
  • TypeScript 语法
    • 基础类型
    • 变量声明
    • 接口
    • 类
    • 函数
    • 泛型
    • 枚举
    • 类型推论
    • 类型兼容性
    • 高级类型
    • Symbol
    • 迭代器和生成器
    • 模块
    • 命名空间
    • JSX
  • 玩转 webpack
    • 第一章: webpack 与构建发展简史
    • 第二章:webpack基础用法
    • 第三章:webpack进阶用法
    • 第四章:编写可维护的 webpack 构建配置
    • 第五章:webpack构建速度和体积优化策略
    • 第六章:通过源代码掌握webpack打包原理
    • 第七章:编写Loader和插件
  • webpack 实践
    • 如何配置 output.library
  • 测试
    • 初识代码测试
    • Jest 中 如何测试 setTimeout
    • Jest Enzyme React 测试实践记录
  • WEB 开发,过往工作沉淀
    • Web安全(DVWA)
    • 内存泄露与事件移除的必要性
    • url to pdf api 与 服务部署踩坑记录
    • 前端调试指南
    • Markdown 转 email
    • github travis ci 自动部署
    • 浏览器缓存知识梳理
    • WEB 系统登录相关知识梳理
    • 将-Axios-请求参数和返回值进行格式化
    • source-map与源码调试
    • HTTPS
    • 使用 rollup 打造自己的 npm 包 (全流程)
    • father-build 是如何工作的
  • 书籍
    • 图解 HTTP 协议
    • 编写可维护的 JavaScript
    • 鸟哥的 Linux 私房菜
    • JavaScript Promise迷你书
  • Linux
    • vimtutor
    • CURL 使用指南
  • Nginx
    • 一次 nginx 分享
  • Git
    • Git Commit Message 须知
    • .gitignore 模板
    • git tag标签
  • 摄影
    • 摄影基础知识
    • 手机摄影从小白到大师
  • 翻译
    • log4js
    • log4js-node
    • 介绍GitLab上的CI/CD
    • 为GitLab Pages创建并调整GitLab CI/CD
    • 关于 rel=noopener
    • AngularJS 团队 Git 提交信息约定
    • JSON Schema
  • Lifehack
    • 20 个 Google 搜索 Tips 来高效使用 Google
    • 37 个高级 Google 搜索 Tips
Powered by GitBook
On this page
  • 1. 加密算法
  • 1.1 对称加密
  • 1.2 非对称加密
  • 2. HTTPS 流程
  • 3. HTTP 与 HTTPS
  • 参考资料

Was this helpful?

  1. WEB 开发,过往工作沉淀

HTTPS

Previoussource-map与源码调试Next使用 rollup 打造自己的 npm 包 (全流程)

Last updated 4 years ago

Was this helpful?

1. 加密算法

1.1 对称加密

即加密和解密都是使用同一个密钥,常见的对称加密算法:DES, 3DES 和 AES

优点:

  • 计算量小、加密速度快、加密效率高,适合加密比较大的数据。

缺点:

  • 发送方和接收方都需要知道密钥,因此存在密钥的传输,但传输的过程中,无法保证密钥不被截获。因此安全性得不到保证

  • 每对用户每次使用对称加密算法时,都需要使用别人不知道的唯一密钥,使得收发双方所拥有的钥匙数量急剧增长,密钥管理成为双方的负担

示例:

1.2 非对称加密

加密和解密使用不同的密钥,公钥加密之后,只有用私钥才可以解开,私钥加密之后,只有用公钥才可以解开

常用算法: RSA 算法

基本过程:

  1. 甲方生成一对密钥,并将其中一把作为公钥对外公开

  2. 得到该公钥的乙方,将自己的机密信息加密(如客户端的key),再发送给甲方

  3. 甲方再用自己的私钥,对乙方的加密信息解密出来

优点:

  • 加密和解密使用不同的钥匙,私钥不需要通过网络进行传输,安全性很高。

  • 加解密速度比对称加密慢

  1. 第2步中服务器的公钥 key 是公开的,无所谓拦截

  2. 第4步中的加密后的 KEY,必须通过服务端用私钥才能解密,因此拦截了也是无用了。

  3. 第5步中没有密钥key的传输,传输的都是加密后的内容,只有客户端和服务器能使用密钥KEY解析信息

因此,保证了非对称加密的安全性

2. HTTPS 流程

  1. 客户端请求 https 网址,连接到服务器的 443 端口(https的默认端口)

  2. 采用 https 的服务器必须要用一套数字 CA (Certification Authority)证书

    1. 证书是需要申请的,由专门的数字证书认证机构通过严格的审核之后,所颁发的电子证书 (当然了是要钱的,安全级别越高价格越贵)

    2. 颁发证书的同时会产生一个公钥和私钥,私钥由服务器端自己保存,不可泄露

    3. 公钥附带在证书的信息中,可以公开,证书本身也附带一个证书电子签名,这个签名用来验证证书的完整性和真实性,可以防止证书被篡改。

  3. 服务器响应客户端请求,将证书传递给客户端,证书包含公钥和大量其他信息:如证书颁发机构信息,公司信息和证书有效期信息等。(Chorme 浏览器通过点击地址栏的锁标志,再点击证书就能够看到证书详细信息)

  1. 客户端解析证书比对其进行验证,如果证书不是由可信任机构颁发,或者证书中的域名和实际域名不一致,或者证书已经过期,就会向访问者发送警告,由其选择是否需要继续通信

  1. 如果证书没有问题,客户端就会从服务器证书中取出服务器的公钥 A,然后客户端生成一个随机码 KEY,并使用公钥A加密随机码 KEY

  2. 客户端将加密后的随机码 KEY 发送给服务器,作为后面对称加密的密钥

  3. 服务端收到加密后的随机码 KEY 之后,使用服务器自己的私钥B对其进行解密,得到随机码KEY

  4. 经历以上的步骤,服务器和客户端终于建立了安全连接,完美解决了对称加密的密钥泄露的问题。后续服务器和客户端均使用随机码 KEY (密钥)对数据进行加密传输通信。

3. HTTP 与 HTTPS

区别:

  1. 最最重要的区别就是安全性,HTTP 明文传输,不对数据进行加密安全性较差(但其实 HTTP 也能够自行加密内容进行传输,比如加密用户的密码,只是... 看参考资料2,用 HTTP 数据加密和 HTTPS 有什么区别)。HTTPS (HTTP + SSL / TLS)的数据传输过程是加密的,安全性较好。

  2. 使用 HTTPS 协议需要申请 CA 证书,一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、DigiCert 和 GlobalSign 等。

  3. HTTP 页面响应速度比 HTTPS 快,这个很好理解,由于加了一层安全层,建立连接的过程更复杂,也要交换更多的数据,难免影响速度。

  4. 由于 HTTPS 是建构在 SSL / TLS 之上的 HTTP 协议,所以,要比 HTTP 更耗费服务器资源。

  5. HTTPS 和 HTTP 使用的是完全不同的连接方式,用的端口也不一样,前者是 443,后者是 80。

HTTPS 的缺点:

  1. 在相同网络环境中,HTTPS 相比 HTTP 无论是响应时间还是耗电量都有大幅度上升。

  2. HTTPS 的安全是有范围的,在黑客攻击、服务器劫持等情况下几乎起不到作用。

  3. 在现有的证书机制下,中间人攻击依然有可能发生。(解决办法,看参考资料3)

参考资料

示例: 在对称加密中,传递的密钥如果被拦截,就可以用来解析或者伪造双方的信息,安全性不高。 而在非对称加密中:

HTTP 和 HTTPS 的关系:HTTPS (Hypertext Transfer Protocol Secure) 是基于 HTTP 的扩展,在 HTTPS 中,原有的 HTTP 协议会得到 TLS (安全传输层协议) 或其前辈 SSL (安全套接层) 的加密。因此 HTTPS 也常指 HTTP over TLS 或 HTTP over SSL。 流程: ! https 通信分为两大阶段:证书验证阶段 + 数据传输阶段,而数据传输阶段又分为:非对称加密阶段 + 对称加密阶段

如下

连接不是私密链接

HTTPS 详解一:附带最精美详尽的 HTTPS 原理图
知乎:用 HTTP 数据加密和 HTTPS 有什么区别?
HTTPS详解二:SSL / TLS 工作原理和详细握手过程
对称加密
非对称加密算法
http和https
完整示例
image.png