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

局域网 web 服务 HTTPS

  •  
  •   bigbugbag · 8 天前 · 3578 次点击

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

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

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

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

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

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

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

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

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

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

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

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



    Apple 设备 MDM 下发 Profile 就好了



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


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