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

局域网 web 服务 HTTPS

  •  
  •   bigbugbag · 85 天前 · 3974 次点击
    这是一个创建于 85 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我在家中的某台服务器上启动了一些服务,并使用 traefik 通过 .home 域名进行反向代理,以供家里所有设备进行访问。

    现在想为这些服务添加证书,使其能通过 HTTPS 进行访问,目前看到的所有方案都需要客户端手动信任证书,有没有方案可以方便一点,不需要客户端操作?

    第 1 条附言  ·  85 天前
    家庭网络中已经有一个 DNS 服务器,并且 hosts 文件中有设置 .home 域名的 IP 为服务器 IP ,现在通过 HTTP 已经可以正常访问所有被 traefik 代理的服务。

    目前的需求是将 HTTP 变为 HTTPS ,并且浏览器不提示不安全的连接。这一步骤我了解到需要在 traefik 中指定一个证书,但是由于域名是 .home ,貌似只能自签证书,这样一来所有客户端就需要手动信任这一自签证书了,非常麻烦。

    不是很懂网络,想了解一下该场景下的最佳实践是什么。
    第 2 条附言  ·  85 天前
    感谢大家的回复,我仔细想了下,如果设备不需要手动信任证书,只需要加入网络就没有安全提醒的话,这种设计下的网络就太不安全了,他人提供的网络就太不容易被信任了。

    最佳方案还是用自己购买的域名作为内网域名吧,这样就可以使用正规机构签发的证书,客户端也不需要手动信任证书了。

    如有理解不对的地方,还望指出。
    40 条回复    2024-08-27 23:05:54 +08:00
    ilovey482i
        1
    ilovey482i  
       85 天前   ❤️ 1
    内网 DNS 服务器,或 hosts 里写死
    cheng6563
        2
    cheng6563  
       85 天前
    只能搞个域名了,比如搞个 eu.org
    f165af34d4830eeb
        3
    f165af34d4830eeb  
       85 天前 via iPhone
    弄一个 eu org 之类的免费域名当内网域名用吧,解析可以本地 dns 也可以用 cf ,然后 traefik 用 acme 签 letsencrypt 证书
    xjyhsaz
        4
    xjyhsaz  
       85 天前
    应该和 OP 需求一样,我是这么用的:申请通配符域名,同 1 楼内网 DNS 服务器将域名解析为内网 ip ,然后域名访问
    bigbugbag
        5
    bigbugbag  
    OP
       85 天前
    @ilovey482i
    @xjyhsaz

    这样是可以,但是浏览器会跳不安全的连接页面,如果不想弹这个页面需要客户端手动信任证书,设备多了比较麻烦。
    bigbugbag
        6
    bigbugbag  
    OP
       85 天前
    @cheng6563
    @f165af34d4830eeb

    想用 .home 或 .local 这种域名,貌似不能走这条路
    bigbugbag
        8
    bigbugbag  
    OP
       85 天前
    @fengci 是可以自签证书,但是需要客户端手动信任证书,很麻烦,想问下有没有不需要手动信任证书的方案。
    Donahue
        9
    Donahue  
       85 天前
    cloudflare tunnel 应该可以吧
    mohumohu
        10
    mohumohu  
       85 天前
    @bigbugbag 答:没有。
    coolfan
        12
    coolfan  
       85 天前
    你这个服务在公网怎么访问,没有正经的域名吗。问 letsencrypt 签一个 example.home 的证书给反向代理服务器呢

    附一个我自己的方案,不知道是不是最佳实践~
    https://coooolfan.com/2024/08/07/Intranet-access-for-intranet-services/
    zephyru
        13
    zephyru  
       85 天前
    正好我最近也有类似的问题
    感觉就两个好法子
    1 、自签证书,手动信任根证书( mkcert )
    2 、搞个域名申请一个正经的证书( acme )
    然后 DNS 把证书对应的域名解析到内网 ip 上去
    bigbugbag
        14
    bigbugbag  
    OP
       85 天前
    @mohumohu 确实,想了下,如果不需要手动信任证书,网络攻击就太容易了
    ilovey482i
        15
    ilovey482i  
       85 天前
    @bigbugbag 那就要用正经的域名,不能用.local 这样的
    bigbugbag
        16
    bigbugbag  
    OP
       85 天前
    @coolfan letsencrypt 无法签 .home .local 之类的域名。我还是用自己的域名作为内网域名吧,这样最不折腾。

    有空看看大佬的方案。
    lcy630409
        17
    lcy630409  
       85 天前
    我的方法,在自己的小鸡服务器上用 acme 申请证书,然后把证书通过加密放在 http 服务上,其他需要的服务端自行解密获取
    bigbugbag
        18
    bigbugbag  
    OP
       85 天前
    @zephyru 我想了下还是方案 2 最好,最不折腾,方案 1 所有客户端都需要手动信任证书。
    fengci
        19
    fengci  
       85 天前
    @bigbugbag #8 你没看我发的链接? 可以让浏览器信任啊。之后不需要手动 ,但需要每个客户端都配置一遍。
    xiaohang427
        20
    xiaohang427  
       85 天前
    lets encryt 自动续期,证书可信
    bigbugbag
        21
    bigbugbag  
    OP
       85 天前
    @fengci #19 客户端太多了,如果有几百个设备就需要全都设置一遍。而且这仅限于浏览器,其他方式的访问还是会有证书问题。
    jadeborner
        22
    jadeborner  
       85 天前   ❤️ 1
    你就用真实的域名,其他的方法都不好,我早就试过了
    defaw
        23
    defaw  
       85 天前   ❤️ 1
    买个真域名,然后在需要证书的地方都配上 acme.sh ,让证书无感自动刷新,问题不就解决了。
    fengci
        24
    fengci  
       85 天前
    @bigbugbag #21 其他方式,正常有个参数 ,不验证 SSL 就没事。
    ZeroClover
        25
    ZeroClover  
       85 天前
    不需要客户端信任 CA 的只能你用真实域名通过 DNS-01 签公共可信证书

    我是自己签的 CA 然后用 PKI 自动给内网服务签发和续期证书



    Apple 设备 MDM 下发 Profile 就好了



    troilus
        26
    troilus  
       85 天前   ❤️ 1
    最方便:使用 cloudflare tunnel
    最适合你:使用 eu.org 等免费域名,使用 caddy 等自动获取证书
    mikasyou
        27
    mikasyou  
       85 天前   ❤️ 1
    有了一个域名后,在公开的 DNS 服务上直接映射成本地 lan ip 就可以了,例如 CF 。然后 ACME 脚本自动申请证书,就完事了。
    xjyhsaz
        28
    xjyhsaz  
       85 天前
    @bigbugbag #5 可能没说清楚,我是买的 com 域名,自动续签 https 证书,然后作为内网域名使用,和你理解的最佳方案是一致的
    Ipsum
        29
    Ipsum  
       84 天前
    加个 candy 做反代,自动申请证书。
    PrinceofInj
        30
    PrinceofInj  
       84 天前
    简而言之,没有任何办法。通用域名的不需要信任是因为根证书太过常见,操作系统已经替你安装了。如果把 Windows 自动更新更证书的特性关掉,win10 老版本新装系统大部分网站都是有证书警告的。
    atan
        31
    atan  
       84 天前
    可以用 nip.io 或者 sslip.io 等服务,比如 https://192-168-0-1.sslip.io ,就能访问到内网的机器,然后申请免费的证书就行
    sky96111
        32
    sky96111  
       84 天前
    像这样?
    ovoo
        33
    ovoo  
       84 天前 via Android
    tailscale 可以为你的内网设备申请证书。


    https://tailscale.com/kb/1153/enabling-https
    henyi2211
        34
    henyi2211  
       84 天前
    内网域名为啥要用 https 呢
    benjaminliangcom
        35
    benjaminliangcom  
       84 天前
    用 duckdns 设置 DNS 记录为内网 IP 再配合 traefike 的 acme 即可
    arfaWong
        36
    arfaWong  
       84 天前
    @henyi2211 #34 有些服务强制 https 才能访问,例如 bitwarden
    daisyfloor
        37
    daisyfloor  
       84 天前
    @Ipsum 对的,并且使用通配符域名
    ox18
        38
    ox18  
       84 天前
    没试过内网申请证书的
    买了域名域名
    内网访问用 设备改 HOSTS 或者 DNS 转发 或者 NAT 回环
    Brodess
        39
    Brodess  
       84 天前
    同 traefik ,cf 有个域名,cert-manager 做证书管理,局域网 NAT 回环可以直接域名 https 域名访问,不过要带端口号,好处是内外网都一样
    b0x
        40
    b0x  
       83 天前
    使用 acme.sh 签发证书,验证方式使用 dns 验证.
    即可实现域名解析到局域网 ip,同时能签发证书.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5219 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 09:36 · PVG 17:36 · LAX 01:36 · JFK 04:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.