折腾啥

  1. Sub-Store 后端 2.14.323 前端 2.14.237修复开启乐观缓存时更新缓存未捕获错误导致的崩溃问题 感谢 armful5862 的反馈去除 Surge Surfboard 输出节点名中的逗号和等号节点上的额外参数调整为下划线开头原参数目前仍保留若有脚本需要使用这些参数请尽快修改: _subName , _collectionName , _resolved , _no-resolve 相关内容链接参数说明 脚本使用说明 Sub-Store 代理 App 版安装下载 Sub-Store 服务器/云平台/Docker/Android 版的相关教程 相关脚本整合 资源合集导航 欢迎评论 & 转发(请保留来源)加入 折腾啥 频道 | 群组 机场推荐 大流量电话卡 支付宝红包 可点击查看 恰饭推荐 本频道 99.99% 的内容均为原创 感谢老板们的支持

    Sub-Store

    后端 2.14.323 前端 2.14.237

    修复开启乐观缓存时更新缓存未捕获错误导致的崩溃问题

    感谢 armful5862 的反馈

    去除 Surge Surfboard 输出节点名中的逗号和等号

    节点上的额外参数调整为下划线开头

    原参数目前仍保留

    若有脚本需要使用这些参数请尽快修改: _subName , _collectionName , _resolved , _no-resolve

    相关内容

    链接参数说明
    脚本使用说明

    Sub-Store 代理 App 版安装下载

    Sub-Store 服务器/云平台/Docker/Android 版的相关教程

    相关脚本整合

    资源合集导航

    欢迎评论 & 转发(请保留来源)

    加入 折腾啥 频道 | 群组

    机场推荐 大流量电话卡 支付宝红包

    可点击查看 恰饭推荐

    本频道 99.99% 的内容均为原创 感谢老板们的支持

  2. Sub-Store 入口检测 小更新 优化了部分逻辑 可一键导入的入口测试配置entrance-test.json 是使用 API 请求版entrance-test-internal.json 是使用 GEOIP 数据版 无需网络请求 查看 发布帖

    折腾啥
    🔗 Sub-Store 的节点入口信息检测脚本 👍 支持自由设置 接口 和 格式 支持所有环境 ▎使用 具体说明可查看脚本内容 常用参数: internal: 可切换为使用内部方法获取数据, 数据来自 GEOIP 数据库, 无需网络请求. 适用于以下环境: a. 📈 Surge, 🎈Loon(build >= 692) 等有 $utils.ipaso 和 $utils.geoip API 的 App b. Node.js 版 Sub-Store, 设置环境变量 SUB_STORE_MMDB_COUNTRY_PATH…
    Sub-Store 入口检测 小更新

    优化了部分逻辑

    可一键导入的入口测试配置

    entrance-test.json 是使用 API 请求版

    entrance-test-internal.json 是使用 GEOIP 数据版 无需网络请求

    查看 发布

  3. Sub-Store 入口/落地检测 更新 1. 默认情况下节点域名会被解析为 IP, 若想还原节点域名, 可在最后加一步节点操作if ($server._domain) $server.server = $server._domain 2. 部分 IP(如各种 CDN ) 使用内部方法 GEO 数据 可能无法得到 countryCode3. 使用内部方法时, 检测条件放宽, aso 和 countryCode 存在其一即可4. 如果嫌中转的名称太长, 可以加一步正则命名: 🇨🇳.*➮(.*)$ => $1 中转 查看 发布帖

    折腾啥
    🔗 Sub-Store 的节点 入口 & 落地 检测 完整示例配置 ⚠️ 支持的运行环境 请查看 检测落地脚本 和 检测入口脚本 说明 ▎使用 如 图 1 导入我的 预设配置: 1. App (使用内部接口版) 2. App (使用网络请求版) 3. Node.js 版 说明: App (使用网络请求版) 比较通用, 全部使用网络请求. 可能会慢到超时 App (使用内部接口版) 设置了 internal 参数使用内部方法获取数据, 数据来自 GEOIP 数据库, 大幅提速 在 订阅 中…
    Sub-Store 入口/落地检测 更新

    1. 默认情况下节点域名会被解析为 IP, 若想还原节点域名, 可在最后加一步节点操作

    if ($server._domain) $server.server = $server._domain


    2. 部分 IP(如各种 CDN ) 使用内部方法 GEO 数据 可能无法得到 countryCode

    3. 使用内部方法时, 检测条件放宽, asocountryCode 存在其一即可

    4. 如果嫌中转的名称太长, 可以加一步正则命名: 🇨🇳.*➮(.*)$ => $1 中转

    查看 发布帖

    • ❤️1
  4. 定时处理订阅, 避免 App 内拉取超时大致逻辑:定时处理订阅, 进行脚本缓存在缓存有效期内, Surge 等 App 拉取订阅时就不会超时了此为 App 版的逻辑. 其他平台使用环境变量 SUB_STORE_PRODUCE_CRON, 格式为 0 */2 * * *,sub,a;0 */3 * * *,col,b 嫌麻烦的话也可以直接使用 Gist 同步配置. 因为这是定时任务, 可以在后台长时间执行. 代理 App 里直接使用 Gist 即可▎使用 Surge 更新到最新模块后, 可在模块参数设置中设置. 同时别忘了更新外部资源其他 App 原理一致, 不要问怎么添加, 自己看对应 App 的语法添加一个定时任务:timeout: 脚本超时时长, 按需调整sub: 自定义需定时处理的单条订阅名, 多个用 , 连接col: 自定义需定时处理的组合订阅名, 多个用 , 连接注意: 是 名称 name 不是 显示名称 displayName 名如果名称需要 encodeURIComponent 编码, 请编码后再用 , 连接顺序: 并发执行单条订阅, 然后并发执行组合订阅Produce=type=cron,cronexp="50 */6 * * *",timeout=120,script-path=

    定时处理订阅, 避免 App 内拉取超时

    大致逻辑:

    定时处理订阅, 进行脚本缓存
    在缓存有效期内, Surge 等 App 拉取订阅时就不会超时了
    此为 App 版的逻辑. 其他平台使用环境变量 SUB_STORE_PRODUCE_CRON, 格式为 0 */2 * * *,sub,a;0 */3 * * *,col,b

    嫌麻烦的话也可以直接使用 Gist 同步配置. 因为这是定时任务, 可以在后台长时间执行. 代理 App 里直接使用 Gist 即可

    ▎使用

    Surge 更新到最新模块后, 可在模块参数设置中设置. 同时别忘了更新外部资源

    其他 App 原理一致, 不要问怎么添加, 自己看对应 App 的语法

    添加一个定时任务:

    timeout: 脚本超时时长, 按需调整
    sub: 自定义需定时处理的单条订阅名, 多个用 , 连接
    col: 自定义需定时处理的组合订阅名, 多个用 , 连接
    注意: 是 名称 name 不是 显示名称 displayName
    如果名称需要 encodeURIComponent 编码, 请编码后再用 , 连接
    顺序: 并发执行单条订阅, 然后并发执行组合订阅

    Produce=type=cron,cronexp="50 */6 * * *",timeout=120,script-path=https://github.com/sub-store-org/Sub-Store/releases/latest/download/cron-sync-artifacts.min.js,argument="sub=sub1,sub2&col=col1,col2"


    关于缓存时长

    拉取 Sub-Store 订阅时, 会自动拉取远程订阅

    远程订阅缓存是 1 小时, 缓存的唯一 key 为 url+ user agent. 可通过前端的刷新按钮刷新缓存. 或使用参数 noCache 来禁用缓存. 例: 内部配置订阅链接时使用 http://a.com#noCache, 外部使用 sub-store 链接时使用 https://sub.store/download/1?noCache=true

    当使用相关脚本时, 若在对应的脚本中使用参数( 别忘了这个, 一般为 cache, 值设为 true 即可)开启缓存, 可设置持久化缓存 sub-store-csr-expiration-time 的值来自定义默认缓存时长, 默认为 172800000 (48 * 3600 * 1000, 即 48 小时)

    Loon 可在插件中设置

    其他平台同理, 持久化缓存数据在 JSON 里

    当配合脚本使用时, 可以在脚本的前面添加一个脚本操作, 实现保留 1 小时的缓存

    async function operator() {
        scriptResourceCache._cleanup(undefined, 1 * 3600 * 1000);
    }



    Sub-Store 合集 频道资源合集 恰饭推荐 群组

    #SubStore #更新记录 #changlog #updates #定时 #cron #produce_cronexp

    • ❤️7
    • 👍2
    • 😁1
  5. #阿里云盘 #CLI #mac #Windows #Linux阿里云盘 CLI 趁现在阿里还没开始搞事情 下点资源到本地囤着多平台支持批量下载双向同步支持 JavaScript 插件支持个人相册 项目仓库

    #阿里云盘 #CLI #mac #Windows #Linux

    阿里云盘 CLI


    趁现在阿里还没开始搞事情 下点资源到本地囤着

    多平台支持

    批量下载

    双向同步

    支持 JavaScript 插件

    支持个人相册

    项目仓库

    • ❤️11
  6. #Surge #DNS #Host #配置 #解析使用 DNS 本地解析 解决使用某些美西的节点时, 经常出现访问 GitHub/Google 资源下载龟速的问题汗流浃背了 P 佬说 use-local-host-item-for-proxy 仅对 IP 映射生效 Surge 为例[General]

    #Surge #DNS #Host #配置 #解析

    使用 DNS 本地解析 解决使用某些美西的节点时, 经常出现访问 GitHub/Google 资源下载龟速的问题

    汗流浃背了 P 佬说
    use-local-host-item-for-proxy 仅对 IP 映射生效


    Surge 为例

    [General]
    use-local-host-item-for-proxy = true
    [Host]
    githubusercontent.com = server:https://9.9.9.11/dns-query
    github.com = server:https://9.9.9.11/dns-query
    google.com = server:https://9.9.9.11/dns-query


    关于参数 use-local-host-item-for-proxy 可参考 文档

    资源合集导航

    欢迎评论 & 转发

    加入 折腾啥

    频道 | 群组

    别忘了 领个红包支持一下

    • ❤️14
    • 👍3
    • 🤩1
  7. 网络信息模块 小更新落地查询 使用 ipinfo 时增加类型显示(如图所示)方便查看所谓的双 ISP 查看 发布帖

    折腾啥
    网络信息 Powered by Chavy‘s 🧰BoxJs and Env.js Available in 📈 Surge, 🏂 Stash, 🎈Loon, 🚀Shadowrocket, 🌀 Quantumult X Created by @xream 🟢支持长按节点进行查询 🟢支持面板 🟢支持网络变化时进行查询通知(IP 相同时不通知) 🟢提供 https://net-lsp-x.com 数据接口, 参数与模块参数相同 🟢分 "国内外" 或者叫 "直连/代理" 显示 IP 地区 运营商 ASN…
    网络信息模块 小更新

    落地查询 使用 ipinfo

    增加类型显示(如图所示)

    方便查看所谓的双 ISP

    查看 发布帖

    • 👍4
    • ❤️1
  8. Sub-Store 后端 2.14.316下载订阅日志中增加请求的 User-Agent便于大致判断拉取订阅的来源Stash 服务器证书 SHA256 指纹字段为 server-cert-fingerprint 相关内容链接参数说明 脚本使用说明 Sub-Store 代理 App 版安装下载 Sub-Store 服务器/云平台/Docker/Android 版的相关教程 相关脚本整合 资源合集导航 欢迎评论 & 转发加入 折腾啥 频道 | 群组 别忘了 领个红包支持一下

    Sub-Store

    后端 2.14.316

    下载订阅日志中增加请求的 User-Agent

    便于大致判断拉取订阅的来源

    Stash 服务器证书 SHA256 指纹字段为 server-cert-fingerprint

    相关内容

    链接参数说明
    脚本使用说明

    Sub-Store 代理 App 版安装下载

    Sub-Store 服务器/云平台/Docker/Android 版的相关教程

    相关脚本整合

    资源合集导航

    欢迎评论 & 转发

    加入 折腾啥

    频道 | 群组

    别忘了 领个红包支持一下

  9. AppRaven合集批量监控 版本: v24.052404 更新: 24-05-24 12:37 安装: 点击安装 🔍 简介: 此快捷指令可配和 『 🐝 Apple Store价格监控 』 使用,主要作用是将AppRaven合集中的应用或者别人分享的合集(此处指由『Apple Store监控快捷管理』导出的合集)批量导入快捷指令监控🔑 方法: ①使用前确保已安装『Apple Store本体价格监控』『Apple Store本体价格监控』 这两个快捷指令②复制自己建的app监控合集或者别人优秀的AppRaven合集链接,也可以是『Apple Store监控快捷管理』导出的合集③运行快捷指令或者直接在AppRaven内分享给快捷指令 ④根据提示操作注:每次导入请遵循只导入本体或者内购监控的原则,不要混在一起导入🌟 我的AppRaven合集

    Forwarded from WWWeng🐝の分享
    AppRaven合集批量监控

    版本: v24.052404

    更新: 24-05-24 12:37

    安装: 点击安装

    🔍 简介:

    此快捷指令可配和 『 🐝 Apple Store价格监控 』 使用,主要作用是将AppRaven合集中的应用或者别人分享的合集(此处指由『Apple Store监控快捷管理』导出的合集)批量导入快捷指令监控

    🔑 方法:
    ①使用前确保已安装『Apple Store本体价格监控』『Apple Store本体价格监控』 这两个快捷指令
    ②复制自己建的app监控合集或者别人优秀的AppRaven合集链接,也可以是『Apple Store监控快捷管理』导出的合集
    ③运行快捷指令或者直接在AppRaven内分享给快捷指令
    ④根据提示操作

    注:每次导入请遵循只导入本体或者内购监控的原则,不要混在一起导入

    🌟 我的AppRaven合集
    https://t.me/wwwengshare/79



    新版 推荐 导航 合集

    #快捷指令

    • ❤️7
    • 👍1
  10. Sub-Store for Magisk, KernelSU & APatch Android 模块版 已更新 GEO 数据相关的字段可以使用 节点 入口 & 落地 检测 中的 Node.js 版一个例子:刷入最新模块下载

    折腾啥
    Sub-Store for Android.zip
    Sub-Store for Magisk, KernelSU & APatch Android 模块版

    已更新 GEO 数据相关的字段

    可以使用 节点 入口 & 落地 检测 中的 Node.js 版

    一个例子:

    刷入最新模块

    下载 https://github.com/P3TERX/GeoLite.mmdb/raw/download/GeoLite2-Country.mmdb/data/adb/GeoLite2-Country.mmdb

    下载 https://github.com/P3TERX/GeoLite.mmdb/raw/download/GeoLite2-ASN.mmdb/data/adb/GeoLite2-ASN.mmdb

    编辑 /data/adb/sub_store/scripts/sub_store.config

    sub_store_mmdb_country_path="/data/adb/GeoLite2-Country.mmdb"
    sub_store_mmdb_asn_path="/data/adb/GeoLite2-ASN.mmdb"


    重启

    其他 请查看 发布帖

    相关内容

    链接参数说明
    脚本使用说明

    Sub-Store 代理 App 版安装下载

    Sub-Store 服务器/云平台/Docker/Android 版的相关教程

    相关脚本整合

    资源合集导航

    欢迎评论 & 转发

    加入 折腾啥

    频道 | 群组

    别忘了 领个红包支持一下

    • 👍3
    • 🤔1
  11. #Pagermaid #插件 #PagerMaid-Pyro #人形自走机器人 #bot #插件 #脚本 #人形 #pingdc #Telegram #DC #http #

    #Pagermaid #插件 #PagerMaid-Pyro #人形自走机器人 #bot #插件 #脚本 #人形 #pingdc #Telegram #DC #http #httping

    人形 HTTP 版 Ping DC

    文件见评论区

    资源合集导航

    欢迎评论 & 转发

    加入 折腾啥

    频道 | 群组

    别忘了 领个红包支持一下

    • ❤️2
  12. Apple Store价格监控 版本: v24.052301 更新: 24-05-23 10:12 安装: 本体监控 内购监控 监控合集(可选装) 监控管理(可选装) 简介: 此快捷指令的主要作用是监控所选app的价格变化,并输出价格变化app的url快捷跳转,用以弥补例如AppRaven对小众app监控不及时的问题(暂时只支持美区和国区,系统语言为中文) 方法: ①根据注释1填写好几个快捷指令的必要配置(需要使用的几个都打开看一下)②把此条快捷指令(或Apple Store监控快捷管理,二选一)添加到分享菜单或者桌面合适位置③在Apple Store界面找到合适的应用分享给快捷指令或者复制链接后运行快捷指令添加或者直接运行快捷指令输入关键字添加④把此条快捷指令(或价格监控合集,二选一)加入到快捷指令自动化以实现自动监控(如我设置的是每日9:00监控一次)⑤可以把Apple Store监控快捷管理添加到桌面以实现快捷添加app、删除app、更改监控状态、临时运行等功能 ⑥当检测到价格变化时,下滑通知栏,长按该条通知,点击蓝色url可实现快捷跳转注:若使用『Apple Store监控快捷管理』临时监控的功能则必须安装『价格监控合集』;内购监控的是内购总和,有变化时需要查看商店内购数据以确定是否为你需要的降价;请保持输入价格的地区唯一性,不然可能会导致输入价格波动影响价格监测快捷指令将会不定期更新,不一定发在频道,可以点击下方新版获取最新版本 新版 推荐 导航 合集 #快捷指令

    Forwarded from WWWeng🐝の分享
    Apple Store价格监控

    版本: v24.052301

    更新: 24-05-23 10:12

    安装:

    本体监控 内购监控

    监控合集(可选装) 监控管理(可选装)

    简介:
    此快捷指令的主要作用是监控所选app的价格变化,并输出价格变化app的url快捷跳转,用以弥补例如AppRaven对小众app监控不及时的问题(暂时只支持美区和国区,系统语言为中文)

    方法:

    ①根据注释1填写好几个快捷指令的必要配置(需要使用的几个都打开看一下)
    ②把此条快捷指令(或Apple Store监控快捷管理,二选一)添加到分享菜单或者桌面合适位置
    ③在Apple Store界面找到合适的应用分享给快捷指令或者复制链接后运行快捷指令添加或者直接运行快捷指令输入关键字添加
    ④把此条快捷指令(或价格监控合集,二选一)加入到快捷指令自动化以实现自动监控(如我设置的是每日9:00监控一次)
    ⑤可以把Apple Store监控快捷管理添加到桌面以实现快捷添加app、删除app、更改监控状态、临时运行等功能
    ⑥当检测到价格变化时,下滑通知栏,长按该条通知点击蓝色url可实现快捷跳转

    注:若使用『Apple Store监控快捷管理』临时监控的功能则必须安装『价格监控合集』;内购监控的是内购总和,有变化时需要查看商店内购数据以确定是否为你需要的降价;请保持输入价格的地区唯一性,不然可能会导致输入价格波动影响价格监测



    新版 推荐 导航 合集

    #快捷指令

    • ❤️7
    • 👍3
  13. Sub-Store 自动设置服务端证书 SHA-256 指纹仅 Node.js 版支持优先使用 sni, 其次节点服务端其他需求可以让 AI 改改. 比如哪些节点需要加之类的.这里示范的是直接从服务端取, 支持所有目标(包括 sing-box 的 certificate_public_key_sha256)

    Sub-Store 自动设置服务端证书 SHA-256 指纹

    仅 Node.js 版支持

    优先使用 sni, 其次节点服务端
    其他需求可以让 AI 改改. 比如哪些节点需要加之类的.
    这里示范的是直接从服务端取, 支持所有目标(包括 sing-box 的 certificate_public_key_sha256)

    const tls = require("tls");
    const crypto = require("crypto");

    function getCertificateInfo(host, port = 443) {
    return new Promise((resolve) => {
    const socket = tls.connect(
    {
    host,
    port,
    servername: host,
    rejectUnauthorized: false,
    },
    () => {
    try {
    const cert = socket.getPeerCertificate(true);

    if (!cert || !cert.raw) {
    socket.end();
    return resolve({
    fingerprint: "",
    publicKeySha256: "",
    });
    }

    const x509 = new crypto.X509Certificate(cert.raw);

    // SHA256 证书指纹
    const fingerprint = cert.fingerprint256 || "";

    // SHA256 公钥(SPKI)
    const publicKeyDer = x509.publicKey.export({
    type: "spki",
    format: "der",
    });

    const publicKeySha256 = crypto
    .createHash("sha256")
    .update(publicKeyDer)
    .digest("base64");

    socket.end();

    resolve({
    fingerprint,
    publicKeySha256,
    });
    } catch {
    socket.end();
    resolve({
    fingerprint: "",
    publicKeySha256: "",
    });
    }
    }
    );

    socket.on("error", () => {
    resolve({
    fingerprint: "",
    publicKeySha256: "",
    });
    });
    });
    }

    async function operator(proxies, targetPlatform, context) {
    console.log(`[证书] INFO: 开始处理 ${proxies.length} 个节点`);

    for await (const proxy of proxies) {
    const host = proxy.sni || proxy.server;

    if (!host || ProxyUtils.isIP(host)) {
    console.log(
    `[证书] WARN: [${proxy.name}] 跳过,目标为 IP 或为空 (${host || "-"})`
    );
    continue;
    }

    console.log(
    `[证书] INFO: [${proxy.name}] 正在获取 ${host} 的证书信息`
    );

    const cert = await getCertificateInfo(host);

    proxy.fingerprint = cert.fingerprint;

    if (cert.publicKeySha256) {
    proxy._certificate_public_key_sha256 = [cert.publicKeySha256];
    }

    if (cert.fingerprint) {
    console.log(
    `[证书] LOG: [${proxy.name}] fingerprint=${cert.fingerprint}, public_key_sha256=${cert.publicKeySha256}`
    );
    } else {
    console.log(`[证书] WARN: [${proxy.name}] 获取证书失败`);
    }
    }

    console.log(`[证书] INFO: 全部节点处理完成`);

    return proxies;
    }


    相关: 自建节点证书相关说明

    服务器合集 Sub-Store 合集 合集 恰饭推荐 群组 联系推广

    #节点 #证书 #SNI #TLS #SHA256 #指纹 #SSL #sing-box #mihomo #surge

    • ❤️12
  14. 自建节点证书相关说明抛砖引玉 留个备忘▎服务端验证客户端 SNI, 几个例子:Trojan-Go : verify_hostname 表示服务端是否校验客户端提供的SNI与服务端设置的一致性 文档Xray : rejectUnknownSni 服务端接收到的 SNI 与证书域名不匹配即拒绝 TLS 握手 文档sing-box: 问了下薄荷佬, 官版没有,fork 有 fork 有▎客户端验证服务端证书, 几个例子: Stash : server-cert-fingerprint TLS 握手时验证服务器证书 SHA256 指纹 文档 Surge: server-cert-fingerprint-sha256 文档skip-cert-verify=true :Surge will not verify the server's certificate.sni=off :turn off SNI completely mihomo: sni 为 IP 时, 也不发 sni▎覆盖用于验证证书的域名,但不会改变 SNI免流等场景下, SNI 改为混淆, 不关验证, 仍然验证证书的域名 Xray: verifyPeerCertByName, URI 上叫 vcn mihomo: name-cert-verify Surge: server-cert-verify-name sing-box(风佬版) certificate_server_name QX tls-verification Sub-Store 中(mihomo/Surge/QX)可按上述输入写字段, 或使用脚本操作 $server['name-cert-verify'] = 'b.com'▎备忘1. 在当前目录生成 10 年的 bing.com 自签证书:openssl req -x509 -nodes -newkey ec:<(openssl ecparam -name prime256v1) -keyout private.key -out certificate.pem -subj "/CN=bing.com" -days 365002. 获取服务器证书 SHA256 指纹:openssl x509 -noout -fingerprint -sha256 -inform pem -in certificate.pem对于远程服务器 openssl s_client -connect foo.com:443 -servername foo.com </dev/null 2>/dev/null | openssl x509 -noout -fingerprint -sha256 | cut -d= -f2▎如果想自动从服务端读取并设置 Sub-Store 自动设置服务端证书 SHA-256 指纹▎手动设置Sub-Store 中直接在输入里写对应的字段, 或使用脚本操作设置内部字段 tls-fingerprint 可自动转其他客户端, 但是 sing-box 的不一样, 没法直接转, 所以开放了字段让你自己设例如使用单行 JSON 的方式, 把俩字段都写上:{ "name": "节点名", "type": "anytls", "server": "服务器", "port": 443, "password": "xYbpwdF9vIELWoLmdC", "udp": true, "sni": "a.foo.com", "fingerprint": "SHA256 指纹", "_certificate_public_key_sha256": [ "SHA-256 哈希" ] } sing-box 中的 certificate_public_key_sha256 ,使用以下命令生成openssl x509 -in certificate.pem -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64对于远程服务器 echo | openssl s_client -servername foo.com -connect foo.com:443 2>/dev/null | openssl x509 -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64 Sub-Store 中需要使用脚本操作 $server._certificate_public_key_sha256 = [ "428F7quaQJvBhEr5TclcjPpsl1ryyNQo7oLBGhhC3UU=" ]参考 Lucy 整理好的 服务器合集 Sub-Store 合集 合集 恰饭推荐 群组 联系推广 #VPS #服务器 #节点 #自建 #证书 #SNI #hostname #TLS #SHA256 #自签 #指纹 #SSL

    自建节点证书相关说明

    抛砖引玉 留个备忘

    ▎服务端

    验证客户端 SNI, 几个例子:

    Trojan-Go : verify_hostname 表示服务端是否校验客户端提供的SNI与服务端设置的一致性 文档

    Xray : rejectUnknownSni 服务端接收到的 SNI 与证书域名不匹配即拒绝 TLS 握手 文档

    sing-box: 问了下薄荷佬, 官版没有,fork 有 fork 有

    ▎客户端

    验证服务端证书, 几个例子:

    Stash : server-cert-fingerprint TLS 握手时验证服务器证书 SHA256 指纹 文档

    Surge: server-cert-fingerprint-sha256 文档

    skip-cert-verify=true :
    Surge will not verify the server's certificate.

    sni=off :
    turn off SNI completely

    mihomo: sni 为 IP 时, 也不发 sni

    覆盖用于验证证书的域名,但不会改变 SNI

    免流等场景下, SNI 改为混淆, 不关验证, 仍然验证证书的域名

    Xray: verifyPeerCertByName, URI 上叫 vcn
    mihomo: name-cert-verify
    Surge: server-cert-verify-name
    sing-box(风佬版) certificate_server_name
    QX tls-verification

    Sub-Store 中(mihomo/Surge/QX)可按上述输入写字段, 或使用脚本操作 $server['name-cert-verify'] = 'b.com'

    ▎备忘

    1. 在当前目录生成 10 年的 bing.com 自签证书:

    openssl req -x509 -nodes -newkey ec:<(openssl ecparam -name prime256v1) -keyout private.key -out certificate.pem -subj "/CN=bing.com" -days 36500

    2. 获取服务器证书 SHA256 指纹:

    openssl x509 -noout -fingerprint -sha256 -inform pem -in certificate.pem

    对于远程服务器 openssl s_client -connect foo.com:443 -servername foo.com </dev/null 2>/dev/null | openssl x509 -noout -fingerprint -sha256 | cut -d= -f2

    ▎如果想自动从服务端读取并设置

    Sub-Store 自动设置服务端证书 SHA-256 指纹

    ▎手动设置

    Sub-Store 中直接在输入里写对应的字段, 或使用脚本操作设置内部字段 tls-fingerprint 可自动转其他客户端, 但是 sing-box 的不一样, 没法直接转, 所以开放了字段让你自己设

    例如使用单行 JSON 的方式, 把俩字段都写上:
    { "name": "节点名", "type": "anytls", "server": "服务器", "port": 443, "password": "xYbpwdF9vIELWoLmdC", "udp": true, "sni": "a.foo.com", "fingerprint": "SHA256 指纹", "_certificate_public_key_sha256": [ "SHA-256 哈希" ] } 


    sing-box 中的 certificate_public_key_sha256 ,使用以下命令生成
    openssl x509 -in certificate.pem -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64

    对于远程服务器 echo | openssl s_client -servername foo.com -connect foo.com:443 2>/dev/null | openssl x509 -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64

    Sub-Store 中需要使用脚本操作 $server._certificate_public_key_sha256 = [ "428F7quaQJvBhEr5TclcjPpsl1ryyNQo7oLBGhhC3UU=" ]

    参考 Lucy 整理好的

    服务器合集 Sub-Store 合集 合集 恰饭推荐 群组 联系推广

    #VPS #服务器 #节点 #自建 #证书 #SNI #hostname #TLS #SHA256 #自签 #指纹 #SSL

    • ❤️3
  15. 管理服务器版 Sub-Store 的人形脚本 新增命令 将被回复的消息内容附加到单条订阅本地订阅中,ssm add 1(为方便小白 从 1 开始, 与 subs 列表对应)方便 偷取 收藏节点 其他 请查看 发布帖 资源合集导航 欢迎评论 & 转发加入 折腾啥 频道 | 群组 别忘了 领个红包支持一下

    折腾啥
    Sub-Store-Manager_new.py
    管理服务器版 Sub-Store 的人形脚本

    新增命令

    将被回复的消息内容附加到单条订阅本地订阅中

    ,ssm add 1(为方便小白 从 1 开始, 与 subs 列表对应)


    方便 收藏节点

    其他 请查看 发布帖

    资源合集导航

    欢迎评论 & 转发

    加入 折腾啥

    频道 | 群组

    别忘了 领个红包支持一下

    • 👍1
  16. #Sub-Store #SubStore #脚本 #节点 #订阅 #节点信息 #检测 #check #脚本 #Node #服务器 #VPS #UDP Sub-Store 节点 UDP 检测脚本仅支持 HTTP-META▎使用具体说明可查看脚本内容常用参数:ntp 用于检测的 NTP 服务器. 默认 time.apple.com参数一般不用加 这里仅做一个示范

    #Sub-Store #SubStore #脚本 #节点 #订阅 #节点信息 #检测 #check #脚本 #Node #服务器 #VPS #UDP

    Sub-Store 节点 UDP 检测脚本

    仅支持 HTTP-META

    ▎使用

    具体说明可查看脚本内容

    常用参数:

    ntp 用于检测的 NTP 服务器. 默认 time.apple.com

    参数一般不用加 这里仅做一个示范

    https://raw.githubusercontent.com/xream/scripts/main/surge/modules/sub-store-scripts/check/http_meta_udp.js#concurrency=10&timeout=5000&retries=1

    相关脚本整合

    资源合集导航

    欢迎评论 & 转发

    加入 折腾啥

    频道 | 群组

    别忘了 领个红包支持一下

    • ❤️10
    • 👍1