为飞牛OS基于FRP的内网穿透开启HTTPS加密
前言
玩NAS的朋友应该有比较多只是在家庭局域网使用,比如日常看看电影、备份手机照片什么的,这属于家庭局域网的使用场景。
当然了,如果你经常出差,或者过年回家不想把NAS也背回去,或者是想上班摸鱼,或者是NAS搭建游戏服务器之类的能公网访问就很有必要了。
公网访问我自己也折腾过很久,俗话说的好上帝给你关上了一扇窗也会顺便把门给带上,我目前的情况是:申请公网IP——没门;使用IPv6——运营商不支持;向日葵——太贵;免费FRP——不稳定。
最近(2024年底)终于刷到一个便宜可靠的方案passnat,最低套餐只要6元每月50G流量,部署起来也比较简单,飞牛官网和passnat的官网(passnat.com)都有教程,B站也有不少视频教程,照着做就行。
我自己也试了一下,只花了不到2小时就弄好了,用起来也非常流畅,但是有个很严肃的问题那就是安全与隐私!而且安全与隐私问题也是所有教程中都没有提到的问题(也不知道这些做教程的人是怎么想的,不懂HTTPS的重要性?没有安全意识?还是压根不在乎安全?),今天这篇文章就进行重点讨论基于FRP的内网穿透的安全设置,并以passnat为例给出解决方案,本文不适用于已有公网ip及域名的使用情形。
安全隐患
首先第一个问题,几乎所有的教程在设置时都选的是TCP或HTTP,我几乎没看到选择HTTPS的,这就是摆明了让个人数据在网络上裸奔呀!!!

第二点,当你注册passnat以后就会看到用户协议(https://www.passnat.com/illegal/),我估计大多数人都没看吧?直接点击了下一步是不是?我们重点来看这几处


假设,我在NAS中保存了和老婆“亲热”的照片,后来我出差,想老婆了,公网访问NAS看了这些照片,如果没有加密,这些照片就有可能被监管系统扫描到,而且很有可能会被识别为H内容。也就是说,你可能只是在公网看了一眼老婆的照片,然后突然就被封了号,甚至可能会以传播XX内容被带走,真的是人在家中坐祸从天上来。
你肯定会在passnat官网上看到类似这样的通知,你也不想让自己的账号出现在这里吧?

另外一种场景,相信也是大家几乎都会遇到的场景,玩NAS的谁没有个千八百部的影音资源呢?敢问在座的各位,有多少人能保证自己的电影是买来的正版资源?假设我在公网访问这些电影,然后没有加密,然后又被监管系统扫描到,然后被识别为盗版侵权,然后又是人在家中坐祸从天上来。
所以说,无论是为了防止被监管系统扫描个人隐私,还是被不法分子恶意抓包,或者说是其他情形,加密都是非常重要的一件事情!
BTW:为什么我总是在说“监管系统”?可能你有过体会,或者从网上看过一些新闻,比如微信群聊封号,比如反诈APP,总之你明白我的意思吧。而且别忘了注册passnat是实名认证的。
准备工作
查阅passnat官网文档可知,源站如果支持https只要简单配置一下就行。
https://doc.passnat.com/docs/app/https?current=https
对于我们而言,这里的源站指的就是飞牛OS,正好飞牛OS原生支持http和https,假如说飞牛OS原生只支持http,配置起来会略微麻烦一点,不过网上有大量文章,这里不再赘述。
我为了安全,在飞牛OS开启强制https,当然我建议大家也都开启。
点击【系统设置】->【安全性】->【端口设置】->【高级设置】->勾选【强制HTTPS连接】,这里也建议勾选【重定向80与443端口】,这样做的好处是域名访问不用填端口号,更方便使用。

生成证书证书
方法一:使用飞牛OS的证书(推荐)
安装飞牛OS时系统会自动生成一个证书,这个证书每个人都是不一样的,可以放心使用。

【系统设置】->【安全性】->【证书】->【fnOS】->【下载】
注意:这里下载的证书包含证书本身以及证书密钥,后续我们要用到证书,不会用到密钥,但密钥文件一定要妥善保存,一旦泄露就等于你把家里大门的钥匙给了别人,建议用完就删,装了360的话就右键选择文件粉碎。
我们要做的就是下载这个证书然后添加到你的电脑上,具体方法请直接阅读【添加根证书】章节。
方法二:自签名证书(适合喜欢折腾的人)
首先是准备工作,安装openssl。linux系统一般自带,没有就去安装,具体怎么装自己想(你都用linux了还不懂怎么安装吗?)
windows系统如果你装过git,或一些安全软件,那么大概率这些软件的安装目录下就有个openssl可以直接用。没有的去官网下载并安装(https://slproweb.com/products/Win32OpenSSL.html),一般人选择Win64 OpenSSL Light这种就好了,exe或msi都无所谓,反正都能用,Light的这是轻量版,足够我们生成一个自签名证书了。
知道如何安装并设置环境变量的话,自己去设置,这样用起来会比较方便,不懂什么是环境变量就按我说的做。
找到openssl.exe所在的目录,例如我的是C:\Program Files\OpenSSL-Win64\bin,在空白处按住shift点击右键,选择【在此处打开powershell窗口】

或者按win+r,输入powershell,命令行中输入cd openssl的安装目录,带空格的目录记得加引号,例如cd "C:\Program Files\OpenSSL-Win64\bin"
以下内容中的所有命令都以linux系统为例,windows请自行将命令中的openssl替换为openssl.exe。
命令只讲关键参数,其他参数请搜索或询问AI。
生成自签名根证书
生成跟证书密钥
这个文件一定要妥善保存,一旦泄露就等于你把家里大门的钥匙给了别人
openssl genrsa -out myca.key 2048
genrsa: 生成RSA密钥对的子命令
-out selfca.key: 指定输出的私钥文件名为selfca.key
2048: 指定RSA密钥长度为2048位,这是目前推荐的安全密钥长度
生成根证书
openssl req -new -x509 -nodes -key myca.key -sha256 -days 730 -out myca.crt -subj "/C=CN/CN=My Root CA/O=MyRootCA"
req: 表示生成证书请求或证书
-new: 生成新的证书请求
-x509: 生成自签名证书而不是证书请求
-nodes: 不加密私钥(no DES)
-key selfca.key: 指定使用的私钥文件,也就是上一步生成的文件
-sha256: 使用SHA256算法签名
-days 365: 证书有效期为365天,建议久一点,否则过期了就要重新签发证书
-out ca.crt: 输出证书文件名为ca.crt
证书主体信息(-subj参数):
/C=CN: 国家代码为中国
/CN=My Root CA: 通用名称为"My Root CA",这里随便改,起个你的名字
/O=MyRootCA: 组织名称为"MyRootCA",这里随便改,起个你的名字
生成服务器根证书
生成服务器密钥
openssl genrsa -out server.key 2048
参数同上,但请注意这是服务器密钥,不要和前一个搞混了
这个文件也要妥善保存,一旦泄露就等于你把家里某个房间的钥匙给了别人
生成签署请求文件
openssl req -new -sha256 -key server.key -subj "/C=CN/O=MyRootServer/OU=MyServer/CN=改成你的passnat域名" -out server.csr
req: 处理证书签名请求
-new: 生成新的证书签名请求
-sha256: 使用SHA-256算法进行签名
-key server.key: 指定私钥文件,即上一步生成的文件
-subj: 设置证书主题信息,包含以下字段:
/C=CN: 国家代码(Country)为中国
/O=MyRootServer: 组织名称(Organization),这里随便改,起个你的名字
/OU=MyServer: 组织单位(Organization Unit),这里随便改,起个你的名字
/CN=XXXX: 通用名称(Common Name),通常是域名,这里改成你的passnat域名,例如myfnos.passnat.cc
-out selfserver.csr: 输出的CSR文件名
设置证书扩展信息
在当前目录随便新建个文件,比如123.txt
填写以下内容
subjectAltName = @alt_names
[alt_names]
DNS.1 = www.example.com
DNS.2 = example.com
DNS.3 = *.example.com
IP.1 = 192.168.xxx.xxx
这个文件的配置内容有很多,这里只列举最重要的几个内容,更多内容请搜索:如何生成带有SAN(subjectAltName)的证书
DNS.1, DNS.2, …: 指定域名,替换成你的passnat域名,例如myfnos.passnat.cc,如果有多个域名或者泛域名,序号累加接着往后填,对我们而言填1个就够了
IP.1, IP.2, …: 指定IP地址,一般是为了局域网内使用,需要的话也可以加,记得路由器里面给你的nas设置固定ip
使用根证书签署服务器证书
openssl x509 -req -in selfserver.csr -CA myca.crt -CAkey myca.key -CAcreateserial -out server.crt -days 365 -extfile ./123.txt
x509: 表示使用X.509证书标准
-req: 表示处理证书签名请求(CSR)
-in selfserver.csr: 输入文件是名为selfserver.csr的证书签名请求文件,也就是上一步生成的文件
-CA selfca.crt: 指定用于签名的CA证书,即【生成根证书】步骤中生成的文件
-CAkey selfca.key: 指定CA的私钥文件,即【生成跟证书密钥】步骤中生成的文件
-CAcreateserial: 创建CA证书的序列号文件(如果不存在)
-out selfserver.crt: 输出生成的服务器证书到selfserver.crt文件
-days 365: 设置证书的有效期为365天,需要小于等于根证书的有效期
-extfile 123.txt: 指定证书的扩展信息,即上一步的文件
至此所有需要的文件生成完毕,你需要保留的文件有
myca.key, myca.crt, server.key, server.crt,其余的都可以删除了,再次强调,两个key文件需要妥善保存,这相当于你家大门的钥匙。
飞牛OS添加根证书
【系统设置】->【安全性】->【证书】->【新增证书】

描述随便填,比如我的证书;证书选择server.crt,私钥选择server.key,确认保存。
点击【服务配置】->【远程访问备用】选择刚刚上传的证书,其余的证书你如果用的话可以改。

至此飞牛OS的所有设置全部完成。
添加根证书
无论你使用的是飞牛OS的证书还是自签名证书,方法都是一样的
客户端添加证书
windows设备添加自签名根证书
最简单的方法:双击打开myca.crt(如果是从飞牛OS导出的证书,请选择对应的crt文件),点击【安装证书】,下一步选择【当前用户】,下一步选择【将所有证书都放入下列存储】,选择【受信任的根证书颁发机构】,下一步,完成

虽然说这个证书是我们自己签发的,似乎应该选择【个人】,但是不要选!选【个人】的话这个证书依然不会被浏览器信任,还是会有警告。
手机、平板等添加自签名根证书
不同手机可能不一样,一般是【系统设置】,【安全】,【加密与凭据】,【安装证书】
另外手机上好像只能把证书添加到用户证书里面,不能添加到受信任的根证书里面,所以打开浏览器时还是会有证书相关的警告。

大概查了一下说是安卓7.0及以上版本,用户安装的证书不会被系统当做可信证书,需要用ROOT权限安装才行。
所以手机上的证书问题目前无解。
passnat设置
主要设置如图

更多细节以及飞牛OS相关配置请参考其他教程,本文不再赘述
公网访问
完成以上设置,并且在飞牛OS中部署好frpc客户端以后你就可以进行公网访问了,域名就是passnat给你的那个域名,如果一切顺利的话你的浏览器不会弹出任何警告,点击证书也可以看到这就是我们签发的证书。

如果你直接在地址栏输入域名出现以下情形

这是因为浏览器默认用http访问,解决方法很简单,就是指定使用https协议,在域名前加上https://,这样浏览器就会用https访问了。
遇到的问题
openssl下载速度慢
别问,懂的都懂,你要学会【上网】
windows下提示 Can’t open xxx, Permission denied
以管理员身份运行powershell
执行命令提示 Can’t load XXX/.rnd into RNG
Can't load /home/user/.rnd into RNG
random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:88:Filename=/home/user/.rnd
在那个目录(比如我这里就需要在/home/user/)中生成一个.rnd随机文件即可
cd /home/user/
openssl rand -writerand .rnd
其实脸滚键盘随便输入一大堆乱起八糟的东西然后重命名成.rnd也行,这里只是需要一个随机的东西做种子确保安全性,这里需要“一大堆”乱七八糟的东西,至少要1KB以上吧
已添加证书,但是chrome打开仍然提示
此服务器无法证实它就是 XXXX - 它的安全证书没有指定主题备用名称。这可能是因为某项配置有误或某个攻击者拦截了您的连接
其实就是本文的“设置证书扩展信息”章节
请参考https://www.cnblogs.com/bxmm/p/18583262
公网使用域名访问没问题了,但是局域网使用ip访问会提示不安全
网肯定会提示,因为我们的证书是针对域名签发的,而不是ip地址签发的。
解决方法很简单:1.签证书时把局域网ip也加进去;2.忽略(家庭局域网嘛,自己家里的路由器能有什么问题呢?)
相关文章:
为飞牛OS基于FRP的内网穿透开启HTTPS加密
前言 玩NAS的朋友应该有比较多只是在家庭局域网使用,比如日常看看电影、备份手机照片什么的,这属于家庭局域网的使用场景。 当然了,如果你经常出差,或者过年回家不想把NAS也背回去,或者是想上班摸鱼,或者是…...
《基于Python与DashScope的智能语音合成工具开发》
《基于Python与DashScope的智能语音合成工具开发》 在当今数字化时代,语音合成技术已经广泛应用于各种场景,如智能语音助手、有声读物、导航系统等。本文将介绍如何使用Python和DashScope平台开发一个简单而功能强大的文字转语音工具。通过这个工具&…...
快速上手Vim的使用
Vim Linux编辑器-vim使用命令行模式下所有选项都可以带数字底行模式可视块模式(ctrlV进入) Linux编辑器-vim使用 Vim有多种模式的编辑器。能帮助我们很快的进行代码的编辑,甚至完成很多其他事情。 默认情况下我们打开vim在命令模式下&#x…...
vue学习第四天 v-on事件绑定
v-on绑定事件如下,点击按钮会弹出alert v-on:事件具体名称“事件调用的函数名” 事件调用的函数写在methods里面 在methods属性的函数里,可以用this获取data的数据,this代表的就是整个vue实例 用this.age就可以拿到age࿰…...
2.8寒假作业
web:[HNCTF 2022 Week1]2048 之前也做过类似的题目,之前的解法是直接get传参score20000,可以尝试 打开环境看源代码,直接改源代码显然是不行的,那么用一下上面的办法也不行,估计是要改其他方向的ÿ…...
PyTorch torch.sign函数介绍
torch.sign 是 PyTorch 库中用于计算输入张量每个元素符号的函数。下面从功能概述、函数原型、参数解释、返回值、使用示例以及与相关函数对比等方面详细介绍 torch.sign。 功能概述 torch.sign 函数会返回一个与输入张量形状相同的新张量,其中每个元素的值表示输…...
Formality:时序变换(五)(寄存器复制)
相关阅读 Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482 一、引言 时序变换在Design Compiler的首次综合和增量综合中都可能发生,它们包括:时钟门控(Clock Gating)、寄存器合并(Register Merging)、…...
音频知识基础
音频知识基础 声音属性声音度量人耳特性通道数音频数字化传输接口 声音属性 响度 响度是人耳对声音强弱的主观感受; 主要和声波的振幅相关,同时也和频率有一定关系; 音调 音调是人耳对声音高低的主观感受; 主要与频率相关&#…...
科技赋能数字内容体验的核心技术探索
内容概要 在数字化时代,科技的迅猛发展为我们的生活和工作带来了深刻的变革。数字内容体验已经成为人们获取信息和娱乐的重要途径,而这背后的技术支持则扮演着至关重要的角色。尤其是在人工智能、虚拟现实和区块链等新兴技术的推动下,数字内…...
DeepSeek-R1 本地大模型搭建对接API
DeepSeek-R1 在这里将学到很多知识 欢迎使用使用DeepSeek-R1本地大模型DeepSeek 的模型基础说明DeepSeek的本地 API 说明DeepSeek 本地模型搭建1、执行命令安装及测试 DeepSeek-R1 API接口调用当然,我们为了让用户更加便捷,我们把API 接口全部放到上面截…...
利用NestJS构建高效的RESTful API接口
1. 引言 项目背景与目标 随着互联网应用的快速发展,RESTful API已成为前后端分离架构中的重要组成部分。本文将介绍如何使用NestJS构建一个高效且可维护的RESTful API接口。目标是通过NestJS的模块化和依赖注入特性,实现一个易于扩展和维护的API系统。 RESTful API的重要性…...
redis高级数据结构布隆过滤器
文章目录 背景什么是布隆过滤器Redis 中的布隆过滤器布隆过滤器使用注意事项实现原理空间占用估计 背景 我们在使用新闻客户端看新闻时,它会给我们不停地推荐新的内容,它每次推荐时要去重,去掉那些已经看过的内容。问题来了,新闻…...
《Wiki.js知识库部署实践 + CNB Git数据同步方案解析》
一、wiki.js 知识库简介 基本概述 定义 :Wiki.js 是一个开源、现代、轻量且功能强大的 Wiki 应用程序,基于 Node.js 构建,旨在帮助个人和团队轻松创建、管理和共享知识。开源性质 :它遵循 AGPLv3 许可证,任何人都可以…...
CSS Overflow 属性详解:控制内容溢出的利器
在前端开发中,处理内容溢出是一个常见的需求。CSS 提供了 overflow 属性,帮助我们控制当内容超出元素框时的显示方式。本文将详细介绍 overflow 属性的各种取值及其应用场景。 1. 什么是 overflow 属性? overflow 属性用于控制当元素的内容…...
.yml文件_YAML格式文件
.yml 文件是 YAML(YAML Ain’t Markup Language)格式的一种文件扩展名。YAML 是一种用于数据序列化的语言,通常用于配置文件、数据交换、日志记录等场景。它以可读性高、简洁的格式为特点,非常适合用于人类阅读和编写。YAML 通常被…...
根文件系统 Debian10【1】移植
1.开发背景 一般根文件系统使用 Busybox 或者是 Buildroot 构建,这样构建出来的文件系统比较小,但是不具备上网功能,扩展性比较差。随着 ARM 的日益强大,ARM 可以搭载更庞大复杂的系统,可以是 Ubuntu 或者 Debian 等发…...
【PyQt】实现格式刷功能
实现格式刷功能 在Qt Designer中直接实现格式刷功能并不支持,但可以通过以下方法在应用程序中实现类似功能: 一、Qt Designer中的替代方案 1.手动设置样式表 在属性编辑器中复制样式表(QSS)内容,粘贴到其他控件。 …...
Could not create task ‘:mainActivity:minifyReleaseWithR8‘.
最近接收了一个老项目,把项目clone下来后,总是报错,无法运行 Build-tool 33.0.1 is missing DX at D:\Android\Sdk\build-tools\33.0.1\dx.batFAILURE: Build failed with an exception.* What went wrong: Could not determine the depende…...
2025年日祭
本文将同步发表于洛谷(暂无法访问)、CSDN 与 Github 个人博客(暂未发布) 本蒟自2025.2.8开始半停课。 任务计划(站外题与专题) 数了一下,通过人数比较高的题,也就是我准备补的题&a…...
二维dp-地图
问题描述 传说,在蓝桥王国中一个极其神秘的森林。这个森林的起点在(1,1) ,终点在 (n,m)。在你进入这个森岭后,每次你只可以向下或者向右走,由于森岭的神秘力量,至多只可以改变 k 次方向。 小蓝现在想知道,…...
Windows下AMD显卡在本地运行大语言模型(deepseek-r1)
Windows下AMD显卡在本地运行大语言模型 本人电脑配置第一步先在官网确认自己的 AMD 显卡是否支持 ROCm下载Ollama安装程序模型下载位置更改下载 ROCmLibs先确认自己显卡的gfx型号下载解压 替换替换rocblas.dll替换library文件夹下的所有 重启Ollama下载模型运行效果 本人电脑配…...
el-table表格点击单元格实现编辑
使用 el-table 和 el-table-column 创建表格。在单元格的默认插槽中,使用 div 显示文本内容,单击时触发编辑功能。使用 el-input 组件在单元格中显示编辑框。data() 方法中定义了 tableData,tabClickIndex: null,tabClickLabel: ,用于判断是否…...
数据库操作与数据管理——Rust 与 SQLite 的集成
第六章:数据库操作与数据管理 第一节:Rust 与 SQLite 的集成 在本节中,我们将深入探讨如何在 Rust 中使用 SQLite 数据库,涵盖从基本的 CRUD 操作到事务处理、数据模型的构建、性能优化以及安全性考虑等方面。SQLite 是一个轻量…...
Ubuntu 24.10 安装Deepseek(Ollama+openwebui)
一、Ollama安装 1.在线安装 curl -fsSL https://ollama.com/install.sh | sh 如果curl工具没有安装先执行如下命令 sudo apt install curl 验证curl是否安装成功 curl --version 安装的过程中会提示输入当前系统登录用户的密码。 安装提示success后,验证安装 ollama -…...
【漫话机器学习系列】084.偏差和方差的权衡(Bias-Variance Tradeoff)
偏差和方差的权衡(Bias-Variance Tradeoff) 1. 引言 在机器学习模型的训练过程中,我们常常面临一个重要的挑战:如何平衡 偏差(Bias) 和 方差(Variance),以提升模型的泛…...
STM32的HAL库开发---高级定时器---输出比较模式实验
一、高级定时器输出比较模式实验原理 定时器的输出比较模式总共有8种,本文使用其中的翻转模式,当TIMXCCR1TIMXCNT时,翻转OC1REF的电平,OC1REF为输出参考信号,高电平有效,OC1REF信号连接到0C1上面ÿ…...
[论文阅读] Knowledge Fusion of Large Language Models
Knowledge Fusion of Large Language Models (FuseLLM) Methodology 整体Pipeline如下图所示 不同的动物代表不同的LLM。左边第一,第二分别是Ensemble以及Weight Merging方法。最右侧为本文提出的FuseLLM。 Ensemble: 融合多个models的预测结果,比如…...
elementui:el-table支持搜索、切换分页多选功能,以及数据回显
1、el-table相关代码,需注意:row-key"(row) > { return row.id }" 以及 :reserve-selection"true" <div class"boxList"><div class"search-form"><!-- 搜索表单 --><el-form :inline"true&q…...
(ICLR=2025)生成的表征对齐:训练扩散Transformer比你想象的更简单
生成的表征对齐:训练扩散Transformer比你想象的更简单 paper是KAIST发表在ICLR 2025的工作 paper title:REPRESENTATION ALIGNMENT FOR GENERATION: TRAINING DIFFUSION TRANSFORMERS IS EASIER THAN YOU THINK Code:链接 ABSTRACT 最近的研究表明&…...
白嫖RTX 4090?Stable Diffusion:如何给线稿人物快速上色?
大家都知道,在设计的初期,我们通常会先绘制草图,然后再进行上色处理,最终才开始进行最终的设计工作。在这个上色的过程中,配色是至关重要的一环。这不仅方便了内部同事的评审,也让产品方和客户可以直观地了…...
