https 是如何保护数据传输的

2023-11-14

为什么需要 https

https 是 http + ssl,也就是加密的 http 数据传输。我们都知道 https 的最主要的作用在于保证数据的安全,但具体来说,https 的安全性主要体现在以下两点:

  • 保证数据传输不被中间人盗用和信息的泄漏。
  • 保证数据内容不被劫持、篡改。

针对上面两点,https 的保护策略如下:

  • 对传输内容进行加密
  • 对请求进行身份验证

对称加密和非对称加密

对称加密

只有一个密钥,同时用来进行加密和解密。

非对称加密

有一对密钥,分别是公钥和私钥。公钥加密,私钥解密。

https 的两种数据保护策略

我们知道 https 对数据的保护主要有两种策略,一种是数据加密传输,另一种是请求身份认证。下面的图包含了两种策略的具体处理过程,我们将针对两种保护策略分别阐述。

如何对传输内容进行加密

我们知道 https 其实就是启用了 SSL 的 http 协议,对于 SSL(Secure Sockets Layer) ,从网络的角度看,其实是位于应用层和传输层之间的安全套接字。如下图所示:
在这里插入图片描述

上面我们介绍了对称加密和非对称加密,对于两种加密手段来说,对称加密的执行效率是高于非对称加密的。

https 在建立连接的过程中,一共发起两次请求,分别使用了对称加密和非对称加密。

我们先忽略身份验证的过程(也就是 CA 证书验证的过程)来看上面的八个步骤。

  1. 客户端发送一个 https 的请求到服务端

  2. 服务端准备公钥和私钥

  3. 服务端将公钥传给客户端

  4. 生成一个随机值(用于对称加密,也即是真正数据传输的密钥),然后用服务端的公钥对随机值进行非对称加密

  5. 客户端将加密后的随机值传送到服务端(双方都拥有了数据传输的随机值密钥)

  6. 服务端使用私钥非对称解密得到客户端的随机值,用获取的随机值将传输的明文内容进行对称加密

  7. 服务端把对称加密后的数据传输到客户端

  8. 客户端通过随机值对称解密获取明文内容

如何对请求进行身份验证

https 通过对数据进行进行加密传输,保护了数据在传输过程中的安全问题。但是,客户端并不知道所请求的服务端一定是所期望请求的服务端。如果有一个中间人劫持了客户端的请求并同时模拟目标服务端的服务,这样就可以对服务端进行非法劫持操作。

通过 CA 证书所进行的身份验证,目的是让客户端能验证所请求的服务端是自己的目标服务端。CA 是由具有网络公信力的第三方结构进行发放和管理,从而保证了校验的有效性。

CA 证书是服务端通过私钥和公钥向第三方机构申请的,因此第三方机构有权管理和撤销服务端的证书。当建立 https 连接的时候,客户端的第一次请求返回的就不仅仅是公钥了,而是一个 CA 证书(里面包含公钥),得到证书后客户端就可以验证 CA 证书的有效性以确定所请求的服务端是自己的目标服务端。

对上述的八个请求过程增加 CA 证书过程如下:

  1. 客户端发送一个https的请求到服务端

  2. **服务端准备申请配置好的数字证书(包含公钥)**和私钥

  3. 服务端将证书传送给客户端,证书中包含了很多信息,比如证书的颁发机构,过期时间,网址,公钥等

  4. **客户端解析证书,由客户端的 TLS 完成,首先会验证公钥是否有效,比如颁发机构,过期时间等。如果有异常,就会弹出警告信息,并结束通信。**如果正常,则生成一个随机值(用于对称加密,也即是真正数据传输的密钥),然后用服务端的公钥对随机值进行非对称加密

  5. 客户端将加密后的随机值传送到服务端(双方都拥有了数据传输的随机值密钥)

  6. 服务端使用私钥非对称解密得到客户端的随机值,用获取的随机值将传输的明文内容进行对称加密

  7. 服务端把对称加密后的数据传输到客户端

  8. 客户端通过随机值对称解密获取明文内容

证书签名生成 CA 证书

我们一般通过 openssl 进行密钥和 CA 证书的生成,因此首先保证电脑上安装有 openssl。

# 验证 openssl 是否安装成功和版本信息
openssl version

具体的步骤如下:

步骤一,生成 key 密钥

主要通过 openssl 生成自己的公钥和私钥信息。

通过下面命令生成自己的 idea 密钥

openssl genrsa -idea -out leaf.key 1024

执行后会得到下面的信息,要求输入一个密码,这个密码要牢记。

Generating RSA private key, 1024 bit long modulus (2 primes)
........+++++
........+++++
e is 65537 (0x010001)
Enter pass phrase for leaf.key:
步骤二,生成证书签名请求文件(CSR 文件)

通过 spenssl 生成证书签名请求文件,这个文件其实就是一个申请模版,将这个生成好的模版和公钥私钥一同发送给第三方机构,来申请具备网络公信力的 CA 证书。

可以通过下面的命令结合生成的密钥来生成 CSR 文件。

openssl req -new -key leaf.key -out leaf.csr

执行后会得到下面的信息,我们要根据实际情况来填写下面的信息,当我们要向第三方机构申请 CA 证书的时候,第三方机构也是通过下面的信息对我们进行身份核验。

Enter pass phrase for leaf.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Liaoning
Locality Name (eg, city) []:Dalian
Organization Name (eg, company) [Internet Widgits Pty Ltd]:My company
Organizational Unit Name (eg, section) []:My unit
Common Name (e.g. server FQDN or YOUR name) []:My name
Email Address []:123456@123.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
步骤三,生成证书签名文件(CA 文件)

第三方结构会根据第二步的请求申请来颁发 CA 证书。

通过上一步我们可以把 csr 文件连同密钥打包发给证书颁发机构 ,然后证书颁发机构会返回给我们签名的 CA 证书,这里我们通过 openssl 自己模拟证书颁发机构生成 CA 证书,也就是 crt 文件。

通过下面的命令生成自己的 crt 证书

openssl x509 -req -days 3650 -in leaf.csr -signkey leaf.key -out leaf.crt

这样我们最终得到了三个文件:

leaf.crt
leaf.csr
leaf.key

nginx 配置 CA 证书

首先我们要确定 nginx 已经编译了 ssl 模块,可以通过 nginx -V 来进行验证,查看编译参数中是否有 --with-http_ssl_module 模块。

nginx 的 https 语法配置
syntax: ssl on | off;
default: ssl off;
context: http, server;

syntax: ssl_certificate file;
default: -;
context: http, server;

syntax: ssl_certificate_key file;
default: -;
context: http, server;
配置实例
server {
  listen  443;
  server_name  115.63.100.28 leaf.orbitfin.ai;
  ssl on;
  ssl_certificate /etc/nginx/ssl_key/leaf.crt;
  ssl_certificate_key /etc/nginx/ssl_key/leaf.key;
  
  index index.html index.htm;
  location / {
    root /opt/app/code;
  }
}
nginx 优化 https 服务
  • 激活 keepalive 长链接
  • 设置 ssl session 缓存

参考文档

[1] HTTPS 建立连接的过程 https://blog.csdn.net/weixin_42123737/article/details/107370628

[2] HTTPS建立连接详细过程 https://zhuanlan.zhihu.com/p/107573461

[3] Let’s Encrypt介绍 https://www.jianshu.com/p/449047437697

[4] 什么是证书颁发机构(CA)https://baijiahao.baidu.com/s?id=1674868871070040575&wfr=spider&for=pc

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

https 是如何保护数据传输的 的相关文章

随机推荐

  • mac 版 Nginx 的使用及 web 项目的实际部署--最简单的方式

    1 电脑是否已经安装了 brew 1 1 终端输入指令 which brew 如果显示如下图 则证明已安装 如果未安装 终端执行如下指令 bin bash c curl fsSL https raw githubusercontent co
  • qt 绘图QPainter

    QPainter绘图系统 QPainter用来进行绘图操作的类 绘图设备一般包括Qwidget Qpixmap QImage 他们提供给QPainter画布 QPaintDevice是一个可以使用QPainter进行绘图的抽象二维界面 QP
  • 易观千帆

    易观 2023年3月证券服务应用活跃人数14131 58万人 相较上月 环比增长0 61 同比增长0 60 2023年3月自营类证券服务应用Top10 活跃人数6221 44万人 环比增长0 08 2023年3月第三方证券服务应用Top10
  • 【vue】 el-table解决分页不能筛选全部数据的问题

    前言 最近开发前端项目表格的时候 使用的是el table 用到了对应的筛选功能 如下图所示 但发现实际只能筛选当前页 通过百度查找相关文章 发现原因是把筛选条件定义在列上 解决方法 所以我们把filter change绑定在最外部即el
  • Merry Christmas

    N久没有更新 决定还是在多灾多难的2008年的圣诞节留个脚印吧 新房已入住3个月零17天
  • springboot 结合easyexcel实现动态表头的方法

    package com yili survey excel import com alibaba excel EasyExcel import org junit jupiter api Test import org springfram
  • vim三种模式

    vim有三种工作模式 一般模式 指令模式 命令模式 编辑模式 一 一般模式的工作模式 1 移动光标 2 复制和粘贴 3 删除字符 4 查找和替换 二 命令模式的工作模式 1 保存文件 2 退出vi 3 读入外部文件 4 显示行号 三 编辑模
  • vue样式穿透 ::v-deep的具体使用

    vue样式穿透 v deep的具体使用 更新时间 2020年06月04日 11 32 59 转载 作者 柳慕笙 这篇文章主要介绍了vue样式穿透 v deep的具体使用 文中通过示例代码介绍的非常详细 对大家的学习或者工作具有一定的参考学习
  • 学习笔记:近似推断(待完善)

    在很多概率模型中 很难训练的最重要的原因是 很难进行推断 所以书中 专门开了这章 来面临训练中最大而又 不能不解决的问题 近似推断 近似推断 可以视为优化问题 主要是 最大化下界 最大化下界 1 EM 期望最大化 2 MAP 最大后验推断
  • STM32 通过HAL库实现双机SPI程序烧录之一SPI双机通信

    一 实现SPI双机通信 主要功能 STM32F407VET6作为主机 STM32F103ZET6作为从机实现F4通过SPI接口发送数据给F1进行串口打印功能 主要是使用STM32cubemx进行相关配置 使用这个软件不能只用于生成代码 要学
  • kubeadm一键搭建kubernetes环境

    kubeadm一键搭建kubernetes环境 安装docker 按官网教程执行https docs docker com v17 09 engine installation linux docker ce centos install
  • Tauri打包windows应用配置中文界面

    使用 Tauri Rust 开发桌面应用 在 windows 系统上 打包后安装包名称后缀 安装界面 相关说明默认都是英文的 如果要默认显示为中文 则需要在 tauri conf json 中配置相应参数 前言 默认情况下 在 window
  • Multi-exit Network

    关键词 Multi exit 动态网络 Anytime prediction budgeted batch classification 参考 https blog csdn net c9Yv2cf9I06K2A9E article det
  • TAS-LR 论文辅助笔记 & 图拉普拉斯正则项推导

    1 图拉普拉斯正则项的直观目标函数 我们已知一张图G的邻接矩阵A 和度矩阵D 那么我们就知道他的拉普拉斯矩阵L D A 在使用矩阵分解的时空数据补全问题中 有一些文献使用图拉普拉斯正则化项来对空间特征矩阵进行约束 我们假设低秩的空间特征矩阵
  • 2021-12-23 工作记录--LayUI-单击行内容展示子表(手风琴效果),堪称yyds

    LayUI 单击行内容展示子表 手风琴效果 百度了好多办法 都不能达到这种效果 所以记录一下 最开始使用layui soul table 但是它不能实现单击行内容展示子表 而是单击行最左列展示子表 所以与项目不符 则放弃了 但是感兴趣的小萝
  • 幼儿园里面有科技设备么

    现代社会 幼儿园是孩子们是快乐且有意义的生涯起点 他们从这里认识世间万物 格物斯坦心系每位的热爱人工智能的孩子们 祖国的未来就靠你们了 幼儿园的核心工作是保证幼儿健康成长 同时需要为幼儿提供良好的学习和生活环境 随着现代技术正朝着智能化的方
  • Rocketmq Filter 消息过滤(TAGS、SQL92)原理详解 & 源码解析

    1 背景 1 1 Rocketmq 支持的过滤方式 Rocketmq 作为金融级的业务消息中间件 拥有强大的消息过滤能力 其支持多种消息过滤方式 表达式过滤 通过设置过滤表达式的方式进行过滤 TAG 根据消息的 tag 进行过滤 SQL92
  • 【 ROS 入门 2】tf 入门学习教程总结(缺少系统整理)

    ROS官网 tf 教程 http wiki ros org tf Tutorials 参考博客 三维旋转矩阵 包括任意轴的通用旋转矩阵 Euler角 单位四元数 的计算 视觉SLAM中的数学基础 第二篇 四元数 ROS学习 轻松使用tf t
  • PIL,cv2,plt的使用与区别

    PIL cv2 plt的使用与区别 1 比较三者的打开图片 显示图片 打开的图片的类型 2 图像类型的转换 PIL与numpy 3 PIL cv2 plt混用 3 1 cv2 plt读PIL打开的图像 3 2 PIL plt读cv2打开的图
  • https 是如何保护数据传输的

    为什么需要 https https 是 http ssl 也就是加密的 http 数据传输 我们都知道 https 的最主要的作用在于保证数据的安全 但具体来说 https 的安全性主要体现在以下两点 保证数据传输不被中间人盗用和信息的泄漏