【Nginx37】Nginx学习:SSL模块(一)简单配置与指令介绍

news2024/12/24 2:53:08

Nginx学习:SSL模块(一)简单配置与指令介绍

又是一个重点模块,SSL 模块,其实就是我们常见的 HTTPS 所需要的配置模块。HTTPS 的重要性不用多说了吧,现在所有的 App、小程序 都强制要求是 HTTPS 的,即使是网站开发,百度也明确了对 HTTPS 的收录会更好。也就是说,HTTPS 已经成为了事实上的正式环境协议标准。

在 Nginx 中,使用 ngx_http_ssl_module 来配置 HTTPS 其实非常简单,不过首先要确认这个模块是否安装了,默认情况下,它是不会自动安装的,需要我们在编译时加上 --with-http_ssl_module 来进行安装。不过现在不管是面板工具还是各种安装教程,都会建议并直接安装上这个模块。

它的配置指令比较多,我们先来配置一套并测试一下,然后了解一下所有的配置指令。下篇文章再拿一套配置进行简单地分析。

先准备证书,这个证书如果要按正式的来说,我们应该去证书提供商那里买的,当然也有一些免费的。或者使用 宝塔面板 之类的工具也有提供免费的 Let's Encrypt 证书。在这里我们进行本地演示,就直接生成证书好了。

[root@localhost article.http.d]# openssl req -new -nodes -newkey rsa:2048 -keyout 37.key -out 37.csr
Generating a RSA private key
......................+++++
..............+++++
writing new private key to '37.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) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

[root@localhost article.http.d]# openssl x509 -req -days 365 -in 37.csr -signkey 37.key -out 37.crt
Signature ok
subject=C = XX, L = Default City, O = Default Company Ltd
Getting Private key

[root@localhost article.http.d]# ll 37*
-rw-r--r-- 1 root root  172 Sep 22 09:13 37.conf
-rw-r--r-- 1 root root 1115 Sep 22 09:15 37.crt
-rw-r--r-- 1 root root  952 Sep 22 09:14 37.csr
-rw------- 1 root root 1704 Sep 22 09:08 37.key

使用 openssl 命令,生成的 csr 和 key 是我们需要的东西。如果你是从云服务商那里买的或者找的免费申请的,在收到邮件下载之后,获得的也是这两个文件。

然后我们就直接用它们进行配置吧。

server{
 listen 8037;
 listen 443 ssl;
 root html;

 ssl_certificate /etc/nginx/article.http.d/37.crt;
 ssl_certificate_key /etc/nginx/article.http.d/37.key;

}

上面这个配置,我们指定 listen 443 ,并加了 ssl 参数,表示这个端口使用 SSL 监听。然后通过两个配置指令指定证书,这里可以写绝对路径也可以写相对路径,如果是相对路径,就是找的 Nginx 运行 prefix 目录。

就这么简单,配完了。接下来访问一下 https://192.168.56.88/ 吧。

dfe5c5106f63ba8c239d86e9a6152482.png

这是什么情况?为啥访问不了呢?其实呀,我们自己生成的证书是没有经过 CA 认证的,这个 CA 的概念就是一个中介信任机构。如果我们从网上买的证书,会经过一些指定的 CA 机构认证。浏览器也会通过这些 CA 机构来判断你的证书是不是合法的,如果没有 CA 认证,就说明这个证书的来源不明,可能不是正规的或者被篡改了。因此,浏览器的安全机制就会出现这样的提示。

我们只需要忽略并确认继续访问之后就可以直接打开了,但是浏览器地址栏上的 https 这几个字符会有个删除斜杠,表示这个链接是有问题的(或者有个小红锁之类的)。大家可以自己看看哦。

普通的 8037 端口还是可以通过 http 访问的,我们也可以在 listen 8037 后面加上 ssl 参数,让 8037 也走 HTTPS 。并且 WireShark 查看效果。

先来看看普通情况下的 WireShark 抓包情况。

127c5552c5ba1ef5be5cdbcf58a608c4.png

数据是明文的。接下来,添加 ssl 参数 listen 8037 ssl; ,重载配置后使用 https 进行访问。

1c61dd4d48ac66e12f9675e654f5bf87.png

很明显,连接建立时就出现 TLVS 连接了,结果也是乱码的加密信息了。

接下来我们再测试一下,使用普通的 http 协议是不是能访问带 ssl 的端口呢?抱歉,直接 400 错误了,错误信息也非常清楚。

// 访问普通 http://192.168.56.88:8037/
<html>
<head><title>400 The plain HTTP request was sent to HTTPS port</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<center>The plain HTTP request was sent to HTTPS port</center>
<hr><center>nginx/1.23.0</center>
</body>
</html>

如果去掉 ssl ,但是又直接使用 https 访问呢?会直接报出这样的错误信息。

// 访问 https://192.168.56.88:8037/
Error: write EPROTO 140347956612328:error:100000f7:SSL routines:OPENSSL_internal:WRONG_VERSION_NUMBER:../../../../src/third_party/boringssl/src/ssl/tls_record.cc:242:

好了,一套简单的 HTTPS 配置我们就完成了。

其实从上面也可以看出,最核心的三个配置指令,就可以完成整个 HTTPS 相关的配置。不过,整个 SSL 的配置远不止这些,虽说其它的可能并不常用吧,但不妨碍我们了解一下。大部分配置在官方文档中显示都只能在 http、server 下配置,但有些其实也可以配置在 location 里面。下面我们就一个一个先看看这些配置信息的介绍。

配置指令

ssl

开启或关闭 ssl 。

ssl on | off;

默认 off ,该指令在版本 1.15.0 中已过时,应该使用 listen 指令的 ssl 参数。(新版本的就不要用这个啦~)

ssl_buffer_size

设置用于发送数据的缓冲区大小。

ssl_buffer_size size;

默认情况下,缓冲区大小为 16k,这对应于发送大响应时的最小开销。为了最小化第一个字节的时间,使用较小的值可能是有益的。一般不需要去设置这个。

ssl_certificate

为给定的虚拟服务器指定带有 PEM 格式证书的文件。

ssl_certificate file;

如果除了主证书之外还应指定中间证书,则应按以下顺序在同一文件中指定它们:首先是主证书,然后是中间证书。 PEM 格式的密钥可以放在同一个文件中。

从 1.11.0 版本开始,可以多次指定该指令以加载不同类型的证书,例如 RSA 和 ECDSA。只有 OpenSSL 1.0.2 或更高版本支持不同证书的单独证书链。对于旧版本,只能使用一个证书链。从 1.15.9 版本开始,在使用 OpenSSL 1.0.2 或更高版本时,可以在文件名中使用变量。请注意,使用变量意味着将为每次 SSL 握手加载证书,这可能会对性能产生负面影响。

可以指定值 data:$variable 来代替文件 (1.15.10),它从变量加载证书而不使用中间文件。请注意,不恰当地使用此语法可能会产生安全隐患,例如将密钥数据写入错误日志。应该记住,由于最大互操作性的 HTTPS 协议限制,虚拟服务器应该侦听不同的 IP 地址。

ssl_certificate_key

为给定的虚拟服务器指定具有 PEM 格式的密钥的文件。

ssl_certificate_key file;

可以指定值 engine:name:id 代替文件 (1.7.9),该文件从 OpenSSL 引擎名称加载具有指定 id 的密钥。可以指定值 data:$variable 代替文件 (1.15.10),该文件从变量加载密钥而不使用中间文件。请注意,不恰当地使用此语法可能会产生安全隐患,例如将密钥数据写入错误日志。

从版本 1.15.9 开始,在使用 OpenSSL 1.0.2 或更高版本时,可以在文件名中使用变量。

ssl_ciphers

指定启用的加密算法。

ssl_ciphers HIGH:!aNULL:!MD5;

加密算法以 OpenSSL 库可以理解的格式指定。可以使用“openssl ciphers”命令查看完整列表。之前的 nginx 版本默认使用不同的加密算法。

ssl_client_certificate

如果启用了 ssl_stapling,则指定一个带有 PEM 格式的可信 CA 证书的文件,用于验证客户端证书和 OCSP 响应。

ssl_client_certificate file;

证书列表将发送给客户。如果不需要,可以使用 ssl_trusted_certificate 指令。

ssl_conf_command

设置任意 OpenSSL 配置命令。

ssl_conf_command name value;

使用 OpenSSL 1.0.2 或更高版本时支持该指令。可以在同一级别上指定多个 ssl_conf_command 指令,当且仅当当前级别上没有定义 ssl_conf_command 指令时,这些指令才从先前的配置级别继承。请注意,直接配置 OpenSSL 可能会导致意外行为。

ssl_crl

指定用于验证客户端证书的 PEM 格式的已撤销证书 (CRL) 文件。

ssl_crl file;

ssl_dhparam

为 DHE 密码指定具有 DH 参数的文件。

ssl_dhparam file;

默认情况下未设置任何参数,因此不会使用 DHE 密码。在 1.11.0 版本之前,默认使用内置参数。

ssl_early_data

启用或禁用 TLS 1.3 早期数据。

ssl_early_data on | off;

默认值是 off ,在早期数据中发送的请求会受到重放攻击。为了防止在应用层受到此类攻击,应使用 $ssl_early_data 变量。使用 OpenSSL 1.1.1 或更高版本 (1.15.4) 和 BoringSSL 时支持该指令。

ssl_ecdh_curve

指定 ECDHE 密码的曲线。

ssl_ecdh_curve curve;

默认值是 auto ,使用 OpenSSL 1.0.2 或更高版本时,可以指定多条曲线 (1.11.0),特殊值 auto (1.11.0) 指示 nginx 在使用 OpenSSL 1.0.2 或更高版本或使用旧版本的 prime256v1 时使用内置于 OpenSSL 库中的列表。

在 1.11.0 版本之前,默认使用 prime256v1 曲线。当使用 OpenSSL 1.0.2 或更高版本时,该指令设置服务器支持的曲线列表。因此,为了使 ECDSA 证书发挥作用,重要的是包含证书中使用的曲线。

ssl_ocsp

启用客户端证书链的 OCSP 验证。

ssl_ocsp on | off | leaf;

默认值是 off ,leaf 参数仅启用客户端证书的验证。使 OCSP 验证正常工作,应将 ssl_verify_client 指令设置为 on 或可选。要解析 OCSP 响应程序主机名,还应指定解析器指令。

ssl_ocsp_cache

为 OCSP 验证设置存储客户端证书状态的缓存的名称和大小。

ssl_ocsp_cache off | [shared:name:size];

默认值是 off ,缓存在所有工作进程之间共享。同名缓存可用于多个虚拟服务器。off 参数禁止使用缓存。

ssl_ocsp_responder

覆盖“授权信息访问”证书扩展中指定的 OCSP 响应者的 URL,以验证客户端证书。

ssl_ocsp_responder url;

仅支持“http://”OCSP 响应。

ssl_password_file

指定一个包含密钥密码短语的文件,其中每个密码短语在单独的行中指定。

ssl_password_file file;

加载密钥时会依次尝试密码短语。

ssl_prefer_server_ciphers

指定在使用 SSLv3 和 TLS 协议时,服务器加密算法应优先于客户端加密算法。

ssl_prefer_server_ciphers on | off;

默认值 off 。

ssl_protocols

启用指定的协议。

ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2] [TLSv1.3];

默认值是 TLSv1 TLSv1.1 TLSv1.2 ,TLSv1.1 和 TLSv1.2 参数(1.1.13、1.0.12)仅在使用 OpenSSL 1.0.1 或更高版本时有效。TLSv1.3 参数 (1.13.0) 仅在使用 OpenSSL 1.1.1 或更高版本时有效。

ssl_reject_handshake

如果启用,服务器块中的 SSL 握手将被拒绝。

ssl_reject_handshake on | off;

默认 off 。

ssl_session_cache

设置存储会话参数的缓存的类型和大小。

ssl_session_cache off | none | [builtin[:size]] [shared:name:size];

它的参数意义是:

  • off 严格禁止使用会话缓存:nginx 明确告诉客户端会话可能不会被重用。

  • none 温和地禁止使用会话缓存:nginx 告诉客户端会话可以被重用,但实际上并没有将会话参数存储在缓存中。

  • builtin OpenSSL 中内置的缓存;仅由一个工作进程使用。缓存大小在会话中指定。如果未给出大小,则等于 20480 个会话。使用内置缓存会导致内存碎片。

  • shared 所有工作进程之间共享的缓存。缓存大小以字节为单位指定;一兆字节可以存储大约 4000 个会话。每个共享缓存都应该有一个任意名称。同名缓存可用于多个虚拟服务器。

两种缓存类型可以同时使用,例如:

ssl_session_cache builtin:1000 shared:SSL:10m;

但是只使用没有内置缓存的共享缓存应该更有效。

ssl_session_ticket_key

使用用于加密和解密 TLS 会话票证的密钥设置文件。

ssl_session_ticket_key file;

如果必须在多个服务器之间共享相同的密钥,则该指令是必需的。默认情况下,使用随机生成的密钥。

如果指定了多个密钥,则仅第一个密钥用于加密 TLS 会话票证。这允许配置密钥轮换,例如:

ssl_session_ticket_key current.key;
ssl_session_ticket_key previous.key;

该文件必须包含 80 或 48 字节的随机数据,根据文件大小,使用 AES256(对于 80 字节密钥,1.11.8)或 AES128(对于 48 字节密钥)进行加密。

ssl_session_tickets

通过 TLS 会话票证启用或禁用会话恢复。

ssl_session_tickets on | off;

默认 on 。

ssl_session_timeout

指定客户端可以重用会话参数的时间。

ssl_session_timeout time;

默认 5m 。

ssl_stapling

启用或禁用服务器对 OCSP 响应的装订。

ssl_stapling on | off;

默认 off ,要使 OCSP 装订工作,应该知道服务器证书颁发者的证书。如果 ssl_certificate 文件不包含中间证书,则服务器证书颁发者的证书应存在于 ssl_trusted_certificate 文件中。对于 OCSP 响应程序主机名的解析,还应指定解析器指令。

ssl_stapling_file

设置后,将从指定文件中获取装订的 OCSP 响应,而不是查询服务器证书中指定的 OCSP 响应者。

ssl_stapling_file file;

该文件应采用“openssl ocsp”命令生成的 DER 格式。

ssl_stapling_responder

覆盖“授权信息访问”证书扩展中指定的 OCSP 响应者的 URL。

ssl_stapling_responder url;

仅支持“http://”OCSP 响应。

ssl_stapling_verify

启用或禁用服务器对 OCSP 响应的验证。

ssl_stapling_verify on | off;

默认值 off ,为了使验证工作,服务器证书颁发者的证书、根证书和所有中间证书应使用 ssl_trusted_certificate 指令配置为受信任的。

ssl_trusted_certificate

如果启用了 ssl_stapling,则指定一个带有 PEM 格式的可信 CA 证书的文件,用于验证客户端证书和 OCSP 响应。

ssl_trusted_certificate file;

与 ssl_client_certificate 设置的证书相反,这些证书的列表不会发送给客户端。

ssl_verify_client

启用客户端证书的验证。验证结果存储在 $ssl_client_verify 变量中。

ssl_verify_client on | off | optional | optional_no_ca;

默认值 off 。可选 optional 参数 (0.8.7+) 请求客户端证书并验证证书是否存在。

optional_no_ca 参数(1.3.8、1.2.5)请求客户端证书,但不要求它由受信任的 CA 证书签名。这适用于 nginx 外部的服务执行实际证书验证的情况。证书的内容可通过 $ssl_client_cert 变量访问。

ssl_verify_depth

在客户端证书链中设置验证深度。

ssl_verify_depth number;

默认 1 。

总结

上面的配置是不是很多看着都很懵圈啊?如果是的话,那么咱们水平其实差不多,很多我也不知道是啥意思。但是就像前面说的,本着了解的态度来学习嘛。当然,最核心的那三个,也就是最上面我们配置的那三个还是需要了解的。还好,一个是要在 listen 后面跟上一个 ssl 参数,表示开启这个端口的 SSL 访问。另外两个就是指定密钥文件的地址。这三个配置说实话,真不复杂,也非常好记。

下篇文章我们将继续 SSL 的学习,主要是继续介绍 SSL 模块的错误状态码、变量信息以及分析一下宝塔生成的 SSL 配置是什么内容。

参考文档:

http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_conf_command

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

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

相关文章

【数据结构初阶】之单链表

【数据结构初阶】之链表 1. 链表是什么2. 单链表的逻辑结构和物理结构 3.如何创建一个单链表的自定义类型4.单链表的增删查改及各种功能的实现4.1 单链表创建一个节点4.2 单链表的头插4.2.1 头插的函数设计&#xff08;参数类型及其返回值&#xff09;4.2.1 头插的函数实现 4.3…

【SOC基础】单片机学习案例汇总 Part1:电机驱动、点亮LED

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

mybatisplus 增删改查

文章目录 1.BaseMapperBaseMapper中提供的CRUD方法&#xff1a; CURD实例通用ServiceIService中的CRUD方法 Service层操作数据实例 1.BaseMapper 说明: 通用 CRUD 封装BaseMapper 接口&#xff0c;为 Mybatis-Plus 启动时自动解析实体表关系映射转换为 Mybatis 内部对象注入容器…

集成测试、单元测试、系统测试之间的关系和区别

前言 为了使软件正常工作&#xff0c;所有单元都应集成在一起并正常运行。集成测试就像是要求不同工种的工人修建一个房子&#xff0c;希望他们都团结协作。如何判断他们在一起是否可以按照计划完成建设呢&#xff1f;唯一了解的方法是通过将它们全部拉在一起并测试它们如何相互…

写时拷贝+进程终止

目录 一、写时拷贝 二、创建多进程 三、进程终止 &#xff08;一&#xff09;main函数的返回值 1. main函数的返回值 2. 退出码 3. 查看进程的退出码 &#xff08;二&#xff09;错误码VS退出码 &#xff08;三&#xff09;代码异常终止 1. 基本概念 2. 信号 &…

Visual Studio 2022打不开net4.5项目的解决方案

1 问题 是因为你本机没有装相关的netframework的包&#xff0c;具体文件夹的路径在&#xff1a; C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework 如下图&#xff1a; 进入目录看&#xff0c;我的net4.5.2是空的&#xff0c;如下图&#xf…

jsp 网上订餐Myeclipse开发mysql数据库web结构java编程计算机网页项目

选题目的 本设计课题为网上订餐系统设计与实现&#xff0c;提供无纸化点餐、支付&#xff0c;实现点餐快捷&#xff0c;方便管理。餐厅电子化是目前的潮流和趋势&#xff0c;大多数企业都将公司内部运营流程电子化。网上订餐管理系统应运而生&#xff0c;能够有效提高公司的管…

【干货】<img/>加载成功||失败

功能描述 img标签绑定URL时&#xff0c;图片加载会出现如下情况&#xff1a; 加载成功展示url加载失败显示默认图片&#xff08;require(/assets/images/imgError.png)&#xff09; dom代码 <img :src"url" alt"" error"errorImageShow($even…

第57篇-某钩招聘网站加密参数分析【2023-10-31】

声明:该专栏涉及的所有案例均为学习使用,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!如有侵权,请私信联系本人删帖! 文章目录 一、前言二、网站分析1.X-S-HEADER参数2.请求参数data3.响应机密值data一、前言 网址: aHR0cHM6Ly93d3cubGFnb3UuY29t…

优化 FPGA HLS 设计

优化 FPGA HLS 设计 用工具用 C 生成 RTL 的代码基本不可读。以下是如何在不更改任何 RTL 的情况下提高设计性能。 介绍 高级设计能够以简洁的方式捕获设计&#xff0c;从而减少错误并更容易调试。然而&#xff0c;经常出现的问题是性能权衡。在高度复杂的 FPGA 设计中实现高性…

【element-ui】表格

效果展示 组件代码 <el-table class"compTableClass" ref"tableOOOOO":class"(className in tableConfig)?tableConfig.className:":data"tableConfig.data" :height"tableConfig.height" style"width: 100%"…

【ES专题】ElasticSearch 高级查询语法Query DSL实战

目录 前言阅读对象阅读导航前置知识数据准备笔记正文一、ES高级查询Query DSL1.1 基本介绍1.2 简单查询之——match-all&#xff08;匹配所有&#xff09;1.2.1 返回源数据_source1.2.2 返回指定条数size1.2.3 分页查询from&size1.2.4 指定字段排序sort 1.3 简单查询之——…

CUMT-----Java课后第三章编程作业

文章目录 一、题11.1 题目描述1.2 代码块1.3 运行截图 二、题22.1 题目描述2.2 代码块2.3 运行截图 一、题1 1.1 题目描述 1.2 代码块 public class Book {private String name;private int pages;public String getname(){return name;}public void setname(String name){th…

HarmonyOS(二)—— 初识ArkTS开发语言(上)之TypeScript入门

前言 Mozilla创造了JS&#xff0c;Microsoft创建了TS&#xff0c;而Huawei进一步推出了ArkTS。因此在学习使用ArkTS前&#xff0c;需要掌握基本的TS开发技能。 ArkTS介绍 ArkTS是HarmonyOS优选的主力应用开发语言。它在TypeScript&#xff08;简称TS&#xff09;的基础上&am…

网络安全安全领域最容易搞混的四个名词:Network网络安全、Cyber网络安全、数据安全、信息安全

在安全领域我们经常会遇到Network网络安全、Cyber网络安全、数据安全、信息安全&#xff0c;它们看起来都差不多&#xff0c;那么它们之间有什么区别呢&#xff1f; 如果你对网络安全入门感兴趣&#xff0c;那么你需要的话可以点击这里&#x1f449;【入门&进阶全套282G学…

基于PyTorch的共享单车使用数量预测研究

收藏和点赞&#xff0c;您的关注是我创作的动力 文章目录 概要 一、预测模型的实现3.1数据的获取和预处理3.2划分数据集3.3构建神经网络 二、PyTorch框架三 原理2.1前馈神经网络2.1.1 BP神经网络 四 预测效果验证4.1小批量梯度下降4.2批量梯度下降4.3随机梯度下降 五 结 论目录…

javascript的webstorage数据存储问题,不能直接存undefined

这篇文章分享一下自己使用sessionStorage遇到的一个小问题&#xff0c;以后遇到要避坑。 需求是easyui表格的单元格编辑&#xff0c;点击保存的时候会结束当前行的编辑&#xff0c;然后修改editingId&#xff08;当前编辑行记录的ID&#xff09;。 目录 一、待解决问题 二、完…

CN考研真题知识点二轮归纳(3)

持续更新&#xff0c;上期目录&#xff1a; CN考研真题知识点二轮归纳&#xff08;2&#xff09;https://blog.csdn.net/jsl123x/article/details/134111760?spm1001.2014.3001.5501 1.TCP/IP 名称&#xff1a;传输控制协议/网络协议&#xff0c;是一个协议族&#xff0c;主…

机器人仿真——gazebo学习笔记(0)

Gazebo是一个功能强大的三维物理仿真平台&#xff0c;具有强大的物理引擎、高质量的图形渲染能力、重点是他是开源的、免费的。 1.Gazebo具备以下几个特点: 1.动力学仿真:支持多种高性能物理引擎,像ODE、Bullet等. 2.三维可视化环境:x、y、z三维环境。 3.传感器仿真:支持传…

【MATLAB】全网唯一的13种信号分解+FFT傅里叶频谱变换联合算法全家桶

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 大家吃一顿火锅的价格便可以拥有13种信号分解FFT傅里叶频谱变换联合算法&#xff0c;绝对不亏&#xff0c;知识付费是现今时代的趋势&#xff0c;而且都是我精心制作的教程&#xff0c;有问题可随时反馈~也可单独获取某一…