网络-HTTPS

news2024/11/17 14:37:51

文章目录

  • 前言
  • 一、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等)提供安全性支持。
OSI、TCP

SSL的主要功能包括以下几个方面:

  • 加密:SSL使用对称加密和非对称加密相结合的方式,对传输的数据进行加密,防止数据在传输过程中被窃听和篡改。
  • 身份验证:SSL使用数字证书对通信双方进行身份验证,确保通信的双方是合法的,并防止中间人攻击。
  • 数据完整性:SSL使用消息摘要算法对数据进行校验,确保数据在传输过程中没有被篡改。
  • 会话管理:SSL使用会话标识和会话密钥来管理通信会话,提供持久的连接和快速重连的功能。

工作流程

  1. 客户端向服务器发起SSL连接请求。
  2. 服务器返回自己的数字证书给客户端。
  3. 客户端验证服务器的证书的合法性和有效性。
  4. 客户端生成一个随机的对称密钥,并使用服务器的公钥进行加密,发送给服务器。
  5. 服务器使用自己的私钥解密客户端发送的对称密钥。
  6. 服务器和客户端之间的通信会使用对称密钥进行加密和解密。

TLS是SSL的升级版,进行了一些改进和优化,广泛使用的是TLS,如今他的版本已经来到1.3了。

加密

1、对称加密

发送和接收使用相同的密钥来对数据进行加密和解密,这样被称为对称加密。

具体流程:

  1. 发送方使用密钥将明文数据加密成密文。
  2. 发送方将密文发送给接收方。
  3. 接收方使用相同的密钥对密文进行解密,还原成明文数据

常见的对称加密算法有:

  • DES(Data Encryption Standard):是一种使用56位密钥的对称加密算法,已经被认为不够安全,现在很少使用。
  • 3DES(Triple Data Encryption Standard):是对DES算法的改进,使用3个56位密钥进行加密,提供更高的安全性。
  • AES(Advanced Encryption Standard):是一种使用128位、192位或256位密钥的对称加密算法,目前被广泛使用,被认为是安全可靠的加密算法。

2、非对称加密

非对称加密使用一对密钥(公钥和私钥)来进行加密和解密。在非对称加密中,公钥用于加密数据,而私钥用于解密数据。

具体流程:

  1. 发送方使用接收方的公钥将明文数据加密成密文。
  2. 发送方将密文发送给接收方。
  3. 接收方使用自己的私钥对密文进行解密,还原成明文数据。

非对称加密算法有:

  • RSA(Rivest-Shamir-Adleman):是一种基于大数分解的非对称加密算法,广泛应用于数字签名、身份验证和密钥交换等领域。
  • ECC(Elliptic Curve Cryptography):是一种基于椭圆曲线数学问题的非对称加密算法,具有相同安全性的情况下,使用更短的密钥长度,提供更高的性能和效率

二、使用HTTPS

1.openSSL生成私钥

  • openSSL工具的安装
    下载地址:openSSL

    • 在系统变量Path中添加环境变量
      openSSL环境变量
    • 验证是否安装成功,命令窗口输入openssl version
      验证安装
  • 证书相关操作
    这里需要三个文件来完成证书相关操作:

    • 私钥文件(private-key.pem),用于对加密数据进行解密。
    • 证书签名请求文件(certificate.csr),用于向CA申请SSL/TLS证书签名,包含了请求者身份信息和公钥信息等,需要发送给CA进行签名,获取有效的SSL/TLS证书
    • SSL/TLS证书文件(certificate.pem),用于对客户端发送请求进行验证,确保通讯安全。包含了签名后的证书信息,用作身份验证。

    SSL/TLS证书文件一般使用第三方(阿里云、华为云、腾讯云)提供的SSL/TLS证书,这里用openssl模拟了,这会使当前访问地址不安全,因为这里生成的证书没有被受信
    SSL/TLS证书

(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: 密码短语

生成SSL/TLS证书文件
文件

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')
})

node服务https

(2)nginx配置https服务(前端)

在nginx文件下的conf中nginx.conf配置文件中修改配置。

nginx

找到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生成文件

之后启动nginx服务,就可以访问了。

nginx服务

总结

总之,HTTPS是一种重要的安全传输协议,可以提供更安全的数据传输方式。在保护敏感信息和建立可信任的通信时,使用HTTPS是一个值得推荐的选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1082520.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

校园贴吧微信小程序搭建教程

大家好啊,罗峰今天来分享一下如何搭建一个校园贴吧微信小程序。一起来看看吧。 开发流程如下: 1.小程序注册:使用微信开放平台账号登录,创建一个新的小程序,并记录下小程序的 AppID。 2.项目初始化:使用微…

上海亚商投顾:沪指冲高回落 华为概念股持续活跃

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 沪指昨日高开低走,创业板指冲高回落。华为产业链继续活跃,鸿蒙方向领涨,润…

Idea创建springboot工程的时候,发现pom文件没有带<parent>标签

今天创建springboot工程,加载maven的时候报错: 这个问题以前遇到过,这是因为 mysql-connector-j 没有带版本号的原因,但是springboot的依赖的版本号不是都统一交给spring-boot-starter-parent管理了吗,为什么还会报错&…

CSS-注册页面

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>注册页面</title><style>*{margin:0px;padding: 0px;box-sizing: border-box;}body{background: url("../image/img/register_bg.png…

OpenCV实现图像傅里叶变换

傅里叶变换 dftcv.dft(img_float32,flagscv.DFT_COMPLEX_OUTPUT): flags:标志位&#xff0c;指定变换类型&#xff0c;cv.DFT_COMPLEX_OUTPUT会返回复数结果。 傅立叶变换&#xff0c;将输入的图像从空间域转换到频率域。 返回结果: 此函数返回一个复杂数值数组&#xff0c…

多尺度retinex图像去雾算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 clc; clear; close all; warning off; addpath(genpath(pwd)); rng(default)img_in im2doub…

Android 10.0 framework层实现app默认全屏显示

1.前言 在10.0的系统开发中,在对于第三方app全屏显示的功能需求开发中,需要默认app全屏显示,针对这一个要求,就需要在系统启动app 的过程中,在绘制app阶段就设置全屏属性,接下来就实现这个功能 效果图如下: 2.framework层实现app默认全屏显示的核心类 frameworks\base\…

Webapck 解决:[webpack-cli] Error: Cannot find module ‘vue-loader/lib/plugin‘ 的问题

1、问题描述&#xff1a; 其一、报错为&#xff1a; [webpack-cli] Error: Cannot find module vue-loader/lib/plugin 中文为&#xff1a; [webpack-cli] 错误&#xff1a;找不到模块“vue-loader/lib/plugin” 其二、问题描述为&#xff1a; 在项目打包的时候 npm run …

gitbook使用

文章目录 前言一、安裝Node.js&#xff1a;二、安裝GitBook&#xff1a;編輯和創建內容&#xff1a;安装typora 前言 ubuntu20.04系统 一、安裝Node.js&#xff1a; 打開終端機&#xff08;Terminal&#xff09;。 使用以下命令來安裝Node.js和npm&#xff08;Node.js的包管…

大数据笔记-大数据处理流程

大家对大数据处理流程大体上认识差不多&#xff0c;具体做起来可能细节各不相同&#xff0c;一幅简单的大数据处理流程图如下&#xff1a; 1&#xff09;数据采集&#xff1a;数据采集是大数据处理的第一步。 数据采集面对的数据来源是多种多样的&#xff0c;包括各种传感器、社…

UGUI交互组件Slider

一.Slider对象的结构 对象介绍Slider附加Slider组件Background背景Fill Area填充范围Fill填充对象Handle Slider Area滑块移动范围Handle滑块 二.Slider组件属性 属性说明Fill Rect关联填充对象Handle Rect关联滑块对象Direction设置方向Min Value最大取值Max Value最小取值Wh…

Python高效实现网站数据挖掘

在当今互联网时代&#xff0c;SEO对于网站的成功至关重要。而Python爬虫作为一种强大的工具&#xff0c;为网站SEO带来了革命性的改变。通过利用Python爬虫&#xff0c;我们可以高效地实现网站数据挖掘和关键词分析&#xff0c;从而优化网站的SEO策略。本文将为您详细介绍如何利…

用例图 UML从入门到放弃系列之三

1.说明 关于用例图&#xff0c;这篇文章我将直接照搬罗伯特.C.马丁老爷子在《敏捷开发》一书种的第17章&#xff0c;并配上自己的理解&#xff0c;因为这一章写的实在是太精彩了&#xff0c;希望能够分享给大家&#xff0c;共勉。以下是老爷子的原文中文翻译以及豆芽的个人解读…

迁移学习--预训练微调

目录 1、迁移学习作用 2、迁移学习的途径 3、相关的领域 4、在计算机视觉中的应用 5、迁移学习的办法 预训练模型 微调 6、总结 1、迁移学习作用 定义&#xff1a;能在一个任务学习一个模型&#xff0c;然后用来解决相关的别的任务&#xff0c;这样我们在一个地方花…

鸿运主动安全云平台任意文件下载漏洞

一、漏洞描述 深圳市强鸿电子有限公司鸿运主动安全云平台存在任意文件下载漏洞&#xff0c;攻击者可通过此漏洞下载敏感文件信息&#xff0c;获取数据库账号密码&#xff0c;从而为下一步攻击做准备。 二、网络空间搜索引擎查询 fofa查询 body"./open/webApi.html"…

排序算法-插入排序法(InsertSort)

排序算法-插入排序法&#xff08;InsertSort&#xff09; 1、说明 插入排序法是将数组中的元素逐一与已排序好的数据进行比较&#xff0c;先将前两个元素排序好&#xff0c;再将第三个元素插入适当的位置&#xff0c;也就是说这三个元素仍然是已排序好的&#xff0c;接着将第…

bootz启动 Linux内核过程总结

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

3d tiles规范boundingVolume属性学习

3d tiles的瓦片&#xff08;Tiles&#xff09;包含一些属性&#xff0c;其中第一项是boundingVolume&#xff1b;下面学习boundingVolume&#xff1b; boundingVolume&#xff0c;这个翻译为边界范围框&#xff0c;如果直译为边界体积可能有问题&#xff0c;其实就是包围盒的意…

Matlab提取colormap

文章目录 简介Matlab代码 简介 使用Maltab依据截取的图片信息&#xff0c;提取colormap&#xff0c;供保存使用 Matlab代码 提取函数 function colormap_outExtract_Colormap(inputfig, colormapsize)% Creat a colormap array from the input figure. % The figure is a c…

虹科科技 | 探索CAN通信世界:PCAN-Explorer 6软件的功能与应用

CAN&#xff08;Controller Area Network&#xff09;总线是一种广泛应用于汽车和工业领域的通信协议&#xff0c;用于实时数据传输和设备之间的通信。而虹科的PCAN-Explorer 6软件是一款功能强大的CAN总线分析工具&#xff0c;为开发人员提供了丰富的功能和灵活性。本文将重点…