网络-HTTPS
文章目录
- 前言
- 一、HTTPS
- 简介
- 优点
- SSL/TSL
- 工作流程
- 加密
- 1、对称加密
- 2、非对称加密
- 二、使用HTTPS
- 1.openSSL生成私钥
- (1)node服务端
- (2)nginx配置https服务(前端)
- nginx服务
- 总结
前言
Http 存在不安全、无状态、性能低、可伪造等问题,为了解决Http
的这些缺点,发展出了HTTPS
协议,它在HTTP
的基础上增加了安全性,通过使用SSL/TLS
协议对数据进行加密和认证,提供了更安全的数据传输方式。
一、HTTPS
简介
HTTPS(Hypertext Transfer Protocol Secure)是一种基于HTTP协议的安全传输协议。它通过使用SSL(Secure Sockets Layer)或TLS(Transport Layer Security)协议对数据进行加密和认证,提供了更安全的数据传输方式。
HTTPS = HTTP + SSL/TLS
优点
- 安全性:
HTTPS使用SSL/TLS协议对数据进行加密和认证,防止数据被窃听和篡改,提供了更安全的数据传输方式。 - 身份验证:
HTTPS使用数字证书对服务器进行身份验证,确保客户端与服务器之间的通信是安全可信的。 - 数据完整性:
HTTPS使用消息摘要算法对数据进行校验,确保数据在传输过程中没有被篡改。 - SEO优化:
搜索引擎更倾向于显示使用HTTPS的网站,因此使用HTTPS可以提升网站的搜索排名。
尽管HTTPS提供了更安全的数据传输方式,但它也会增加服务器的负载和网络延迟,因为加密和解密数据需要额外的计算资源。
SSL/TSL
SSL(Secure Sockets Layer)是一种用于保护网络通信安全的协议。它位于传输层和应用层之间,为应用层协议(如HTTP、SMTP、FTP等)提供安全性支持。
SSL的主要功能包括以下几个方面:
- 加密:SSL使用对称加密和非对称加密相结合的方式,对传输的数据进行加密,防止数据在传输过程中被窃听和篡改。
- 身份验证:SSL使用数字证书对通信双方进行身份验证,确保通信的双方是合法的,并防止中间人攻击。
- 数据完整性:SSL使用消息摘要算法对数据进行校验,确保数据在传输过程中没有被篡改。
- 会话管理:SSL使用会话标识和会话密钥来管理通信会话,提供持久的连接和快速重连的功能。
工作流程
- 客户端向服务器发起SSL连接请求。
- 服务器返回自己的数字证书给客户端。
- 客户端验证服务器的证书的合法性和有效性。
- 客户端生成一个随机的对称密钥,并使用服务器的公钥进行加密,发送给服务器。
- 服务器使用自己的私钥解密客户端发送的对称密钥。
- 服务器和客户端之间的通信会使用对称密钥进行加密和解密。
TLS是SSL的升级版,进行了一些改进和优化,广泛使用的是TLS,如今他的版本已经来到1.3了。
加密
1、对称加密
发送和接收使用相同的密钥来对数据进行加密和解密,这样被称为对称加密。
具体流程:
- 发送方使用密钥将明文数据加密成密文。
- 发送方将密文发送给接收方。
- 接收方使用相同的密钥对密文进行解密,还原成明文数据
常见的对称加密算法有:
- DES(Data Encryption Standard):是一种使用56位密钥的对称加密算法,已经被认为不够安全,现在很少使用。
- 3DES(Triple Data Encryption Standard):是对DES算法的改进,使用3个56位密钥进行加密,提供更高的安全性。
- AES(Advanced Encryption Standard):是一种使用128位、192位或256位密钥的对称加密算法,目前被广泛使用,被认为是安全可靠的加密算法。
2、非对称加密
非对称加密使用一对密钥(公钥和私钥)来进行加密和解密。在非对称加密中,公钥用于加密数据,而私钥用于解密数据。
具体流程:
- 发送方使用接收方的公钥将明文数据加密成密文。
- 发送方将密文发送给接收方。
- 接收方使用自己的私钥对密文进行解密,还原成明文数据。
非对称加密算法有:
- RSA(Rivest-Shamir-Adleman):是一种基于大数分解的非对称加密算法,广泛应用于数字签名、身份验证和密钥交换等领域。
- ECC(Elliptic Curve Cryptography):是一种基于椭圆曲线数学问题的非对称加密算法,具有相同安全性的情况下,使用更短的密钥长度,提供更高的性能和效率
二、使用HTTPS
1.openSSL生成私钥
-
openSSL工具的安装
下载地址:openSSL- 在系统变量Path中添加环境变量
- 验证是否安装成功,命令窗口输入
openssl version
- 在系统变量Path中添加环境变量
-
证书相关操作
这里需要三个文件来完成证书相关操作:- 私钥文件(private-key.pem),用于对加密数据进行解密。
- 证书签名请求文件(certificate.csr),用于向CA申请SSL/TLS证书签名,包含了请求者身份信息和公钥信息等,需要发送给CA进行签名,获取有效的SSL/TLS证书
- SSL/TLS证书文件(certificate.pem),用于对客户端发送请求进行验证,确保通讯安全。包含了签名后的证书信息,用作身份验证。
SSL/TLS证书文件一般使用第三方(阿里云、华为云、腾讯云)提供的SSL/TLS证书,这里用openssl模拟了,这会使当前访问地址不安全,因为这里生成的证书没有被受信
(1)node服务端
生成私钥文件:
openssl genpkey -algorithm RSA -out private-key.pem -aes256
- openssl: OpenSSL 命令行工具的名称。
- genpkey: 生成私钥的命令。
- -algorithm RSA: 指定生成 RSA 私钥。
- -out private-key.pem: 将生成的私钥保存为 private-key.pem 文件。
- -aes256: 为私钥添加 AES 256 位加密,以保护私钥文件不被未经授权的人访问。
在之后需要一个密码短语并确认,在后续需要操作密钥文件的时候需要。
Enter PEM pass phrase: 123456
Verifying - Enter PEM pass phrase: 123456
生成证书签名请求文件:
openssl req -new -key private-key.pem -out certificate.csr
- “req”: 表示使用 X.509 证书请求管理器 (Certificate Request Management) 功能模块。
- “-new”: 表示生成新的证书签名请求。
- “-key private-key.pem”: 表示使用指定的私钥文件 “private-key.pem” 来加密证书签名请求中的密钥对。
- “-out certificate.csr”: 表示输出生成的证书签名请求到文件 “certificate.csr” 中。该文件中包含了申请者提供的一些证书请求信息,例如公钥、授权主体的身份信息等。
填写信息:
Country Name (2 letter code) []:CN 国家
State or Province Name (full name) []:CQ 省份
Locality Name (eg, city) []:CQ 城市
Organization Name (eg, company)SMZ 组织或者是个人
Organizational Unit Name (eg, section) []:Min 机构名称
Common Name (eg, fully qualified host name) []:localhost 域名
Email Address []: 邮箱地址
Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []: SMZSMZSMZSMZ 密码加盐
An optional company name []:Min 公司名称
生成SSL/TLS证书文件:
openssl x509 -req -in certificate.csr -signkey private-key.pem -out certificate.pem
- “x509”: 表示使用 X.509 证书管理器功能模块。
- “-req”: 表示从输入文件(这里为 “certificate.csr”)中读取证书签名请求数据。
- “-in certificate.csr”: 指定要读取的证书签名请求文件名。
- “-signkey private-key.pem”: 指定使用指定的私钥文件 “private-key.pem” 来进行签名操作。一般情况下,签名证书的私钥应该是和之前生成 CSR 的私钥对应的。
- “-out certificate.pem”: 表示将签名后的证书输出到文件 “certificate.pem” 中。该文件中包含了签名后的证书信息,包括签名算法、有效期、公钥、授权主体的身份信息等。
- Enter pass phrase for private-key.pem: 密码短语
Https端口默认为443,配置好密钥和证书以及密码短语就可以启动服务了
const https = require('https')
const fs = require('node:fs')
// http端口默认80 , https端口默认443
https.createServer({key:fs.readFileSync('private-key.pem'),cert:fs.readFileSync('certificate.pem'),//密码短语passphrase: '123456'
},(req,res)=>{res.writeHead(200)res.end('success')
}).listen(443,()=>{console.log('https server is running at https://localhost:443')
})
(2)nginx配置https服务(前端)
在nginx文件下的conf中nginx.conf配置文件中修改配置。
找到https相关配置部分,niginx已经将配置写好了的,只需要调整。
- openssl genrsa -out nginx.key 2048 (生成私钥)
- openssl req -new -key nginx.key -out nginx.csr(生成签名文件)
- openssl x509 -req -in nginx.csr -signkey nginx.key -out nginx.crt(生成证书)
生成过程和上面的步骤差不多,只不过没有了密码短语。
# HTTPS server#server {listen 443 ssl;server_name localhost;ssl_certificate nginx.crt;ssl_certificate_key nginx.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;# ssl_ciphers HIGH:!aNULL:!MD5;# ssl_prefer_server_ciphers on;location / {root html;index index.html index.htm;}}
之后启动nginx服务,就可以访问了。
总结
总之,HTTPS是一种重要的安全传输协议,可以提供更安全的数据传输方式。在保护敏感信息和建立可信任的通信时,使用HTTPS是一个值得推荐的选择。
相关文章:

网络-HTTPS
文章目录 前言一、HTTPS简介优点SSL/TSL工作流程 加密1、对称加密2、非对称加密 二、使用HTTPS1.openSSL生成私钥(1)node服务端(2)nginx配置https服务(前端) nginx服务 总结 前言 Http 存在不安全、无状态…...

GPU提升多分类问题
使用GPU加速多分类问题,与上一篇文章中前几部分代码相同 多层线性网络这里,直接使用nn.Module搭建,与之前自定义搭建的三层网络一样,但注意这里用的激活函数是ReLU的改良后的LeakyReLU,能够避免在输入小于0时出现梯…...

Selenium+Pytest自动化测试框架
前言 selenium自动化 pytest测试框架 本章你需要 一定的python基础——至少明白类与对象,封装继承 一定的selenium基础——本篇不讲selenium,不会的可以自己去看selenium中文翻译网 测试框架简介 测试框架有什么优点呢: 代码复用率高&…...

云原生Kubernetes:Rancher管理k8s集群
目录 一、理论 1.Rancher 2.Rancher 安装及配置 二、实验 1.Rancher 安装及配置 三、问题 1. Rancher 部署监控系统报错 四、总结 一、理论 1.Rancher (1) 概念 Rancher 简介 Rancher 是一个开源的企业级多集群 Kubernetes 管理平台,实现了 Kubernetes …...

Java架构师异步架构设计
目录 1 导学2 为何需要异步消息架构3 消息发送失败该如何处理4 mq接收到消息过后又丢失了消息怎么办5 消费者弄丢了消息该如何处理6 消息重复消费了该怎么处理7 消息的有序处理8 消息堆积该如何处理9 如何提高消息消费的速度10 消息应用的可插拔11 如何设计消息的统一id12 异步…...

电子书制作软件Vellum mac中文版特点
Vellum mac是一款专业的电子书制作软件,它可以帮助用户将文本文件转换为高质量的电子书,支持多种格式,包括EPUB、MOBI、PDF等。Vellum具有直观的用户界面和易于使用的工具,可以让用户快速地创建和发布电子书。 Vellum mac软件特点…...

Langchain 代理 (Agents) ,赋能超级 LLMs
原文:Langchain 代理 (Agents) ,赋能超级 LLMs - 知乎 大型语言模型(LLMs) 非常强大,但它们缺乏“最笨”的计算机程序可以轻松处理的特定能力。逻辑、计算和搜索是计算机通常擅长的领域,但 LLMs 却遇到了困…...
华为OD机考算法题:阿里巴巴找黄金宝箱(1)
题目部分 题目阿里巴巴找黄金宝箱(1)难度易题目说明一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从 0 ~ N 的箱子,每个箱子上面贴有一个数字,箱子中可能有一个黄金宝…...
【JAVA版本】websocket获取B站直播弹幕——基于直播开放平台
教程 B站直播间弹幕Websocket获取 — 哔哩哔哩直播开放平台 基于B站直播开放平台开放且未上架时,只能个人使用。 代码实现 1、相关依赖 fastjson2用于解析JSON字符串,可自行替换成别的框架。 hutool-core用于解压zip数据,可自行替换成别的…...

Vue中的监视属性
一、监视属性的使用 (一)配置watch进行监视 当我们想要监视一个属性改变的时候就可以使用监视属性监视其变化并进行操作。 语法格式如下: watch:{ 监视属性名称 : { // 监视属性的配置项 } } 1. handler函数 当监视的属性发生变化时就调…...

汽车一键启动点火开关按键一键启动按钮型号规格
汽车点火开关/移动管家一键启动按键/汽车改装引擎启动按钮型号:YD828溥款开关 一键启动按钮(适用于配套启动主机使用或原车一键启动开关更换) 1.适合配套专用板板安装 2.开孔器开孔安装 3.原车钥匙位安装 外观:黑色 按钮上有3种不…...

快速学习微服务保护框架--Sentinel
学习一个框架最好的方式就是查看官方地址,sentinel是国内阿里巴巴公司的,官网更方便官网 官网 微服务保护框架 Sentinel 1.初识Sentinel 1.1.雪崩问题及解决方案 1.1.1.雪崩问题 微服务中,服务间调用关系错综复杂,一个微服务往往依赖于多个其它微…...

bootz启动 Linux内核过程总结
一. bootz启动Linux uboot 启动 Linux内核使用bootz命令。当然还有其它的启动命令,例如,bootm命令等等。 前面几篇文章分析 bootz命令启动 Linux内核的过程中涉及的几个重要函数。 bootz启动 Linux内核过程中涉及的全局变量images_凌肖战的博客-CSDN博…...

前端项目--尚医通学习分享
这段时间跟着线上课程完成了一个项目:商医通(基于Vue3TypeScript的医院挂号平台)。具体我就不过多地介绍其具体功能以及详细的实现步骤了,感兴趣的小伙伴直接:传送门 。该文章我就分享一下在该项目中学习到的一些知识点…...

【Python】QTreeWidget树形结构添加
源码: # 参考网址: https://blog.csdn.net/weixin_42286052/article/details/129532631 import os.path import sys from PySide6.QtWidgets import QApplication,QMainWindow,QHBoxLayout,QVBoxLayout,QPushButton,QTreeWidget,QTreeWidgetItem,QTreeW…...
day 2 2.3.2 类和对象
具有相同或相似性质的一组对象的抽象就是类 null只能被转换成引用类型,不能转换成基本类型,因此不要把一个null值赋给基本数据类型的变量 Java语言支持的类型分为两类:基本类型和引用类型 基本类型包括boolean类型和数值类型。数值类型有整…...

vscode虚拟环境使用jupyter
在某虚拟环境内安装torch,但是ipyn文件保存后无法正常导入torch 1.conda环境下安装Jupyter等一切配置,进入虚拟环境 2.conda install nb_conda_kernels 3.安装完成后重新打开VSCode,在运行Jupyter notebook中的代码之前,在右上…...

Maven 依赖管理
Maven 一个核心的特性就是依赖管理。当我们处理多模块的项目(包含成百上千个模块或者子项目),模块间的依赖关系就变得非常复杂,管理也变得很困难。针对此种情形,Maven 提供了一种高度控制的方法。 可传递性依赖发现 …...

【踩坑】hive脚本笛卡尔积严重降低查询效率问题
前一阵子查看我们公司的大数据平台的离线脚本运行情况, 结果发现有一个任务居然跑了一天多, 要知道这还只是几千万量级的表, 且这个任务是每天需要执行的 于是我把hive脚本捞出来看了下, 发现无非多join了几个复杂的子查询, 应该不至于这么久, 包括我又检查了是不是没有加上每…...

【C进阶】内存函数
strcpy拷贝的仅仅是字符串,但是内存中的数据不仅仅是字符,所以就有了memcpy函数 1. memcpy void *memcpy (void * destination ,const void * source , size_t num) 函数memcpy从source的位置开始向后拷贝num个字节的数据到desti…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...

ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...