V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Leon6868
V2EX  ›  程序员

打算架设一个局域网 https 调试服务,征求建议

  •  
  •   Leon6868 · 28 天前 · 3363 次点击

    动机

    最近在开发 WebRTC 服务,但是浏览器只允许本机 ip 和 https 域名开启 WebRTC 服务,因此难以在局域网内进行真机调试。

    如果有个本地 https 调试服务就好了,但是自己生成证书安装很麻烦,而且不适用于移动端。

    所以就想,如果搭建一个能解析到任意本地地址的 https 域名服务,也许能帮助到与我有同样困境的人(也许有吧!)

    实现

    域名方面,打算注册一个域名(如 localhttps.top 或者 httpsdns.top ),有无更好的域名建议?

    局域网 IP 段主要有以下网段:

    10.0.0.0/8
    172.16.0.0/12
    192.168.0.0/16
    

    楼主认为可行的操作形式是:

    1. 用户首先通过 cli 或者网页登记,然后得到 usr 识别码和 *.usr.localhttps.top 的泛域名证书(识别码是为了预防潜在的滥用行为)。
    2. 用户访问 xxx-xxx-xxx-xxx.usr.localhttps.top,DNS 服务器将自动解析到对应的局域网 IP ,如 xxx.xxx.xxx.xxx

    将所有局域网 IP 段填充到 DNS 解析中并不现实,因此想到了两种解决方案:

    1. 通过 namesilo 的 DNS API 实时登记请求解析的 IP 。
    2. 搭建自己的 NameServer (如 ns1.localhttps.top),实现自动解析和权鉴。

    手动管理证书是及其不健康的,楼主的主要工作语言是 Python 和 NodeJS ,计划开发能自动下载证书、提供证书、维护证书的包。

    疑问

    1. 是否有更好的方法?
    2. 请问这套流程是否可行?
    3. 如果可行,这套流程是否有安全漏洞?

    最重要的,大家认为这套系统有必要存在吗?

    欢迎任何建议!

    第 1 条附言  ·  27 天前
    第 2 条附言  ·  27 天前
    很好,已经有人做过了 https://github.com/Corollarium/localtls
    47 条回复    2024-10-25 22:05:43 +08:00
    shadowyue
        1
    shadowyue  
       28 天前
    注册个自己的域名,弄个小服务器呗
    Leon6868
        2
    Leon6868  
    OP
       28 天前
    @shadowyue #1 主要是自己注册域名要钱而且很麻烦,而且手动填写 dns 也很麻烦,所以想着设计一套自动化系统也许能帮到有需要的人。
    Nazz
        3
    Nazz  
       28 天前
    用 cfssl 生成自签名证书就行了
    snipking
        4
    snipking  
       28 天前
    参与调试的机器有多少啊,数量不大的话简单点就是做自签名证书,然后直接对服务器 IP 签发证书,再把 ca 证书装到调试设备上就行了
    jqknono
        5
    jqknono  
       28 天前
    得先确认浏览器是否只允许本机 ip 和 https 域名开启 WebRTC 服务, 试试看开一个 private 窗口是否允许.
    Leon6868
        6
    Leon6868  
    OP
       28 天前
    @jqknono #5 这个倒是可以确认,非本机的局域网 ip 根本无法获取麦克风和摄像头权限
    ligolas
        7
    ligolas  
       28 天前
    看起来,你的需求 mkcert, https://github.com/FiloSottile/mkcert 完全能满足
    rrfeng
        8
    rrfeng  
       28 天前
    你不想弄证书,和解析到哪有什么关系???解决了什么问题???
    andyskaura
        9
    andyskaura  
       28 天前
    花你那个工夫,随便捞个证书都已经调试完毕了
    vinsony
        10
    vinsony  
       28 天前   ❤️ 1
    eu.org+acme 不要钱
    cheng6563
        11
    cheng6563  
       28 天前
    eu.org 搞个免费域名,然后搞个泛域名证书完事了
    IvanLi127
        12
    IvanLi127  
       28 天前
    如果有一个可用的域名,就没这么多麻烦事了。绕这一圈,有域名的人已经调通功能合分支了。
    ajan
        13
    ajan  
       28 天前
    mkcert +1
    catamaran
        14
    catamaran  
       28 天前
    不太懂,开发环境想用域名,架个 dns 服务不就完了,甚至可以直接写到 host 文件中
    Belmode
        15
    Belmode  
       28 天前
    #6 你要是为了过浏览器媒体权限,随便自签一个证书不就可以了。随便签,直接用 ip 访问 webrtc 的服务就行了。哪还那么麻烦,你搞域名,岂不是还要内网穿透?公司安全部门能允许你这么干。(笑
    mringg
        16
    mringg  
       28 天前
    这个用 vscode 的那个端口映射就可以了,他那个能映射出 https 的链接地址
    JensenQian
        17
    JensenQian  
       28 天前
    @Leon6868 #2 六位数 xyz 域名
    一年 spaceship 只要 0.67 美金,注册续费同价

    证书的话 let's 谷歌 zerossl 三个月的免费通配符,自动续签完事了
    lcy630409
        18
    lcy630409  
       28 天前
    控制局域网的 dns apple.com 也是你的
    ETiV
        19
    ETiV  
       27 天前 via iPhone
    前不久才通过的一个规范,把 .internal 后缀保留用来给内网需求的域名用

    https://github.com/nh2/internal-contstrained-pki
    上面这个工具可以做一个在约束了域名是 **.*.internal 前提下签发域名证书的 CA 根证书(不太好组织语言…),然后其他机器就可以比较放心的信任这个 CA 根证书,不会作恶
    esee
        20
    esee  
       27 天前 via Android
    mkcert 不就一个命令的事情?自签证书有啥麻烦的?这才是最简单的方案。甚至你可以给 IP 签 https ,啥域名都不用。
    fuzzsh
        21
    fuzzsh  
       27 天前 via Android   ❤️ 1
    realpg
        22
    realpg  
       27 天前
    改 Host 表,自签 10 年/20 年证书,通用性最强还简单
    生成一次证书能用十年以上,有啥麻烦的
    移动端安装个证书信任 用邮箱就行 很简单 ios android 都傻瓜操作
    xiangyuecn
        23
    xiangyuecn  
       27 天前   ❤️ 1
    最简单的就是用自己的正式域名,直接分配个本地开发子域名,使用正式的证书,手机上也能正常使用

    自签证书,那是十年前的事了,记得 Android 里面的浏览器早就不信任用户导入的根证书了,没 root 寸步难行
    xiangyuecn
        24
    xiangyuecn  
       27 天前   ❤️ 1
    对于申请证书,强推一下:向 Let's Encrypt 、ZeroSSL 、Google 等支持 ACME 协议的证书颁发机构,免费申请获得用于 HTTPS 的 SSL/TLS 域名证书( RSA 、ECC/ECDSA ),支持多域名和通配符泛域名;只需在现代浏览器上操作即可获得 PEM 格式纯文本的域名证书,不依赖操作系统环境( Windows 、macOS 都能用),无需下载和安装软件,无需注册登录,纯手动操作,只专注于申请获得证书这一件事,简单易用,非常适用于希望手动快捷申请获得证书的使用场景

    本网页客户端仅一个静态 HTML 文件,不依赖其他任何文件:
    https://xiangyuecn.github.io/ACME-HTML-Web-Browser-Client/ACME-HTML-Web-Browser-Client.html
    SenLief
        25
    SenLief  
       27 天前
    跑一个 caddy
    codingBug
        26
    codingBug  
       27 天前
    ngrok ,cloudflare tunnels 可以
    Leon6868
        27
    Leon6868  
    OP
       27 天前
    @xiangyuecn #24 佬!昨天调试你的 Record.js ,就是看到这个网页才萌生搭建解析服务的想法的!
    eryajf
        28
    eryajf  
       27 天前
    https://github.com/FiloSottile/mkcert

    看看这个工具是不是你需要的
    Leon6868
        29
    Leon6868  
    OP
       27 天前
    @xiangyuecn #23 个人认为手动安装证书是非常不优雅的行为,应该采用服务搞定的、不用额外配置的方法,何况手动管理可能还会带来安全问题
    Leon6868
        30
    Leon6868  
    OP
       27 天前
    @eryajf #28 说实话本机调试怎么样都好,就算是非 localhost IP 也能通过 Chrome 设置强行开启 WebRTC ,我关心的是局域网内跨机器调试,特别是 Android 、iOS 等移动端,希望通过非侵入式的方法解决 tls 问题。
    Leon6868
        31
    Leon6868  
    OP
       27 天前
    @codingBug #26 ngrok 免费太慢了
    weijancc
        32
    weijancc  
       27 天前
    本地搭个 https 环境就好, 无视证书风险访问即可
    bluedawn
        33
    bluedawn  
       27 天前 via iPhone
    acme-dns 申请证书不行嘛
    Ipsum
        34
    Ipsum  
       27 天前 via Android
    用 caddy 做反向代理,使用 acme 的 dns 验证,生成个通配符的证书不就好了?
    Carlos920
        35
    Carlos920  
       27 天前
    还有个方式,使用 https://github.com/smallstep/certificates 搭建内网 CA
    evill
        36
    evill  
       27 天前
    Magic DNS (sslip.io) ??
    Ariake265
        37
    Ariake265  
       27 天前
    namesilo 注册 6 位纯数字.xyz 域名一年只要 10 块钱左右,我直接买了 10 年的()
    dzdh
        38
    dzdh  
       27 天前
    支持 up

    但是 考虑个问题啊 假设解析到了 127.0.0.1 我请求 https://uuid.usr.xx.com 的时候。后端服务是需要设置证书的。怎么办呢。 做个客户端?你做内网映射?
    zephyru
        39
    zephyru  
       27 天前
    目的是调试的话,mkcert 自签证书吧,调试设备里装 CA 就好了,不麻烦。
    想弄正经证书,泛域名解析 + 自己内网搭个 DNS ,用哪个指哪个。
    zephyru
        40
    zephyru  
       27 天前
    @dzdh
    #38
    你这个描述让人费解。
    你是说 https://uuid.usr.xx.com 解析到 127.0.0.1 但是后端服务不在 127.0.0.1 上?
    这种情况下,本地起个 Nginx 转发一下就完了,下游服务可以忽略证书,Nginx 配个证书。

    如果是应用解析到 127.0.0.1 ,在客户端请求 https://uuid.usr.xx.com (实际 ip 在别的地方)。
    服务端配置证书就完了,不想配置就和上面一样用 Nginx 转发一下。
    从应用的服务端请求同理。

    总结:后端服务能配置证书就配置,不能配置就 Nginx 转发。
    dzdh
        41
    dzdh  
       27 天前
    @zephyru #40

    127.0.0.1 上跑了个 nginx 。https://uuid.usr.xx.com 解析到 127.0.0.1 了。本地 nginx 证书的私钥从哪来?

    server { ssl_certificate ?? }
    只是域名解析到 127.0.0.1 没啥用啊。
    lucasdev
        42
    lucasdev  
       27 天前   ❤️ 1
    我也觉得 Microsoft dev tunnel 就够了吧,就是楼上有人说过的 “vscode 的端口映射”

    https://learn.microsoft.com/en-us/azure/developer/dev-tunnels/get-started?tabs=windows
    zephyru
        43
    zephyru  
       27 天前
    @dzdh #41
    按照这楼最新的讨论,似乎是准备用服务自动去 Let's Encrypt 申请然后分发。
    这方法就很多了,包装下 acme 也是法子。
    dzdh
        44
    dzdh  
       27 天前
    @zephyru #43

    那干脆。开放个下载链接。自动定时申请 *.usr.xxx.com 证书并打包公开下载。自己配。得了。
    igwen6w
        45
    igwen6w  
       27 天前
    何必这么费劲,目标机器启动 http 服务,自签证书,域名随便弄,手机上开个代理指向目标机器局域网 ip 就行了或者内网穿透。
    Leon6868
        46
    Leon6868  
    OP
       27 天前
    @dzdh #44 对的,我就是这个意思,网站自动维护泛域名证书,要用直接下载就行了,也提供 python 、nodejs 的自动下载库。
    mozhizhu
        47
    mozhizhu  
       26 天前
    随便搞个域名,然后再 Linux 环境下,跑一个 nginxproxymanager ,轻松帮你解决问题(
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3418 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 11:05 · PVG 19:05 · LAX 03:05 · JFK 06:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.