• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Inzufu
V2EX  ›  程序员

内网 IP 是否有必要上 HTTPS,如果有必要,应该怎么做

  •  1
     
  •   Inzufu ·
    Lilac-milena · Aug 6, 2024 via Android · 16785 views
    This topic created in 818 days ago, the information mentioned may be changed or developed.
    看 pve 默认内网 ip 就加了自签的 https 证书,可以在一定程度上防止数据在中途被劫持。

    我目前想了几种方法:
    1. 自签 IP 证书:
    浏览器弹不信任是小事,就是有时候编程请求 api 的时候直接就因为 https 校验失败就报错了。
    2. 使用实际持有的域名
    2.1 把域名解析到本地 IP:每个网络的本地网络环境都不一样,把域名解析到一个未知的 IP 地址感觉不太好。
    2.2 在本地 DNS 把域名解析到局域网
    要求每台机器都修改 hosts 或 DNS 服务器,有些麻烦。

    那看来就真的没办法了吗
    68 replies  •  2024-08-08 14:08:03 +08:00
    yadiman
    yadiman
    Aug 6, 2024❤️1
    1
    自签内网 ip 或者内部域名用 mkcert 。
    有一点要注意,有部分服务是不支持 ip 证书签名的,比如:lucky 和 Nginx (起码我搞不定)
    koloonps
    koloonps
    Aug 6, 2024
    2
    @yadiman mkcert 不是可以的吗?
    yadiman
    yadiman
    Aug 6, 2024
    3
    mkcert 可以签发 ip 或者域名证书。但有的引擎安装不了 ip 证书。
    pve ,openwrt ,爱快等可以。
    但 lucky (一个国产端口转发工具)还有 NGINX 无法使用。
    mohumohu
    mohumohu
    Aug 6, 2024❤️2
    4
    ·申请泛域名证书
    ·192.168.1.1.yourdomain.com
    chengran630
    chengran630
    Aug 6, 2024❤️3
    5
    没必要为了上 https 而上 https
    内网本来就是安全的话 何必多此一举呢,还得专门维护,要是有一次证书到期忘记了 还影响业务
    kenvix
    kenvix
    Aug 6, 2024
    6
    @mohumohu #4 点分是新的域名
    mohumohu
    mohumohu
    Aug 6, 2024
    7
    @kenvix 新域名有啥问题
    forty
    forty
    Aug 6, 2024
    8
    内网机器其实是能够被统一管理的,可以初始化成统一的内网 DNS ,不用每台机器挨个去改 hosts 的。

    内网 DNS 上面将域名解析到内网 IP ,然后使用 CSR 生成公网域名证书就可以了,也不存在安全问题。
    如果很犟就是不想用公网域名证书,那就统一安装自签 CA 证书即可。
    建议不要用 IP 证书,内网环境尽量模拟外网情况,能够更方便开发与调试。
    Mitt
    Mitt
    Aug 6, 2024
    9
    @mohumohu #4 泛域名证书不支持递归,只能是 *.yourdomain.com 不能是 *.*.yourdomain.com
    chf007
    chf007
    Aug 6, 2024
    10
    内网加不加无所谓,我的 pve 加了只是为了浏览器打开没有警告,好看
    mohumohu
    mohumohu
    Aug 6, 2024
    11
    @Mitt 替换成-就好了
    yichya
    yichya
    Aug 6, 2024❤️2
    12
    可以考虑在 2.1 的基础上搭配一个大局域网方案( Zerotier / Tailscale / Tinc 之类)。大部分设备也有客户端,对于固定的网络环境也可以考虑装在 NAT 网关上,就不用每个设备都装客户端

    @lcy630409 上 https 很多时候是因为现代浏览器的默认安全策略,比如不开 https 的话一些剪贴板 API 之类是不能用的。证书维护有很多自动化方案去做,基本上不用太操心

    @yadiman 自签证书,主要还是每台设备都要专门信任一次根证书,麻烦还是其次,有些设备可能是不方便(不是不能,但是不方便)塞根证书进去的

    @Mitt 这个倒是小问题,192-168-1-1.yourdomain.com 也不是不能用,很多 pcdn 都用这种路子
    totoro625
    totoro625
    Aug 6, 2024❤️1
    14
    我选择了 2 ,通过 acme 在一张证书上申请了多个泛域名,每个网络对应一个泛解析,网络环境多变也只是改变其中的泛解析
    例如 demo 服务,A 地用 demo.a.example.com ,B 地用 demo.b.example.com ,全部指向内网的一台 NGINX 服务器,通过前缀的 demo 进行分流到对应的服务
    srlp
    srlp
    Aug 6, 2024 via iPhone
    15
    tailscale 自动带了 https
    yinmin
    yinmin
    Aug 6, 2024 via iPhone❤️5
    16
    大厂的做法是:使用实际持有的域名部署公共证书,然后部署内部 dns ,仅在内网才能解析出域名对应的 ip 地址。
    xiangyuecn
    xiangyuecn
    Aug 7, 2024
    17
    证书 *.xxx.com 不匹配 *.xx.xxx.com 就离谱的很,有点满清遗老那味

    *.xxx.com 不匹配 xxx.com ,这玩意又不涉及 dns 解析,烂货😂
    wheat0r
    wheat0r
    Aug 7, 2024❤️2
    18
    考虑零信任思想的话,需要的
    IvanLi127
    IvanLi127
    Aug 7, 2024❤️1
    19
    方法二,如果路由支持,可以在路由器上配 hosts ,配完只要 dns 用路由的,局域网内就能全部生效,缺点就是加个域名得配一遍。
    iceheart
    iceheart
    Aug 7, 2024 via Android
    20
    买个域名+免费证书
    kennylam777
    kennylam777
    Aug 7, 2024 via Android
    21
    我的 PVE 及 Opnsense 都有正式的證書,因為我就有一個域名,用 ACME + DNS-01 也算方便。

    本來就有一堆東西需要內網解析,倒也不難。
    wzw
    wzw
    Aug 7, 2024 via iPhone
    22
    @yinmin #16 移动端和不同网络 测试的时候,怎么办。

    另外一样的话,会不会误操作
    busier
    busier
    Aug 7, 2024 via iPhone
    23
    OpenSSL 建立 ca 自发啊
    yyysuo
    yyysuo
    Aug 7, 2024
    24
    没有必要。
    kennylam777
    kennylam777
    Aug 7, 2024
    25
    PVE 自帶 ACME 本來就十分簡單, 自動維護的, 我實在看不到不設定的理由, 而且好處多多, VNC 連線也比較順利。

    況且局域網不是用 DHCPC 分發 DNS 的嗎?都這種規模難道沒有本地 DNS? 為甚麼要手動設定 Host?

    而且 PVE 主機的 IP 是固定的, 為甚麼會每個局域網也需要設定一次?

    不過近期和一些中國開發者合作, 對方連公網都不用 HTTPS, 甚麼 Nacos 等亂七八糟的東西都直接用公網 HTTP 無加密連線, 就只有一個限制 IP 地址的防火牆, 甚麼 MySQL 密碼的都在國際雲上用 HTTP 直接通過 GFW 連回去中國辦公室的固定 IP 就是了, 這個國家的人似乎特別討厭 HTTPS 似的。
    Dragonish3600
    Dragonish3600
    Aug 7, 2024
    26
    内网机器直接加入 AD ,然后 AD 签发证书就好
    DawnMoon
    DawnMoon
    Aug 7, 2024
    27
    我都是自己的 CA 签名自己的内网专用域名,内网 DNS 解析,要教程的见:

    https://blog.vvzero.com/2023/01/20/self-signed-certificate-with-SAN/
    zwlinc
    zwlinc
    Aug 7, 2024❤️1
    28
    证书这个东西和你域名指向的 IP 没啥关系,大可以用 let‘s encryption 签,然后解析到内网即可
    NessajCN
    NessajCN
    Aug 7, 2024
    29
    我一般不会给自己家里卧室厨房厕所都装防盗铁门,
    当然我不清楚楼主的习惯所以也只是说一下我自己的做法
    cutiechi
    cutiechi
    Aug 7, 2024
    30
    没必要用 ip ,域名解析到内网 ip 就行,caddy 自动 https
    knightgao2
    knightgao2
    Aug 7, 2024
    31
    https 其他不清楚,但是浏览器没 https 很多用不了
    qsnow6
    qsnow6
    Aug 7, 2024
    32
    我没记错的话,对于自回环或者 LAN 是有免签域名的
    keyfunc
    keyfunc
    Aug 7, 2024
    33
    建议上,现代的浏览器对于 http 有各种限制,http 让浏览器保存密码这件事就很麻烦
    MFWT
    MFWT
    Aug 7, 2024❤️1
    34
    我习惯是直接上自签名证书,然后使用的设备信任一下

    缺点嘛.....似乎安卓只能导入 SHA-1 的证书,也不确定是不是我哪里没做对
    forvvvv123
    forvvvv123
    Aug 7, 2024
    35
    @zwlinc

    正解,就用权威证书,内网访问都弄个域名即可
    jenson47
    jenson47
    Aug 7, 2024
    36
    stepca 自己部署服务,自己签,而且还可以打破公有证书的时间限制呢~
    lovelylain
    lovelylain
    Aug 7, 2024❤️1
    37
    1.没必要用 ip 证书,你都内网了,ip 证书肯定得自签名,自签名就得客户端导入根证书,还不如域名更好记
    2.更没必要用 ip.yourdomain.com 的证书,统一分配域名,安全性更好
    3.反正都要配置,最好的做法就是楼上说的,使用实际持有的域名部署公共证书,然后部署内部 dns ,仅在内网才能解析出域名对应的 ip 地址
    cccer
    cccer
    Aug 7, 2024❤️1
    38
    自签也比 http 好,新版 chrome 会各种阻止 http 或者自动跳 https ,导致访问异常。
    zyq2280539
    zyq2280539
    Aug 7, 2024
    39
    内网同样可以申请公网域名哈,只不过需要公网 VPS 辅助一下,我现在方案:DNS 解析:腾讯云, 公网 VPS:腾讯云,家里小主机:迷你主机,vps 和家里主机上同时安装 nginx,一开始都用 80 端口,vps 主机上 nginx 反向代理家里小主机的 nginx,然后组网工具用 tailscale, vps 上用 certbot 申请 ssl 证书,然后家里小主机上也同样用 certbot 申请证书就可以了,都申请完毕之后 VPS 要反 https://内网域名, vps 要写死 hosts 指向家里小主机,基本没啥问题,家里有 bind9 做了内网 DNS 解析,很完美的实现
    lneoi
    lneoi
    Aug 7, 2024❤️1
    40
    chrome 在非 https 下有不同的安全限制. 如果内网对信息管控有一点要求, 上个 https 也安全一些, 毕竟是内网就不设防也挺危险的
    zyq2280539
    zyq2280539
    Aug 7, 2024❤️1
    41
    总结下来,核心点,两层 nginx,配合 certbot,certbot 的 nginx 插件
    1. VPS 上正常解析,申请 ssl 证书,
    2. tailscale 组网,vps 上的 nginx 反向代理家里 mini 主机的 nginx 的 80 端口都用域名访问,但是要设置 vps 的 hosts 否则就造成了循环解析,设置完毕 hosts 之后就正常引入流量到家里小主机上了
    3. 家里小主机上同样用 certbot 申请 ssl 证书,申请完毕后此时家里小主机的 80 端口会被自动重定向到 443 端口
    4. 修改 vps 上反向代理端口从 80 改到 443 即可。
    5. 局域网内有 bind 配置自己的解析服务,家里局域网都解析到内网了,不在家里的时候解析先到腾讯云然后再到家里小主机上

    本人此方案正常使用好几年了,没啥问题。不过最近发现泛域名证书好像更好用,反而不用这么麻烦的修改
    zwlinc
    zwlinc
    Aug 7, 2024❤️1
    42
    @zyq2280539 内网可以不用 http-01 challenge ,用 dns-01 challenge 就行了,证明这个域名属于你就行
    zyq2280539
    zyq2280539
    Aug 7, 2024
    43
    @zwlinc 对,我以前都是用 http 验证,最近发现用 dns 验证也挺好的,还搞了泛域名做尝试
    Zzdex
    Zzdex
    Aug 7, 2024❤️1
    44
    我是家里有一套 k8s, 所有 web 服务 都通过 ingress 做入口,然后 证书靠 cert-manager 做自动签发,配置一次 之后就不管了

    内网 靠 家里 的 dns 解析到 ingress lb

    外网 就是家里的 ip

    麻烦一点就是 运营商不开放 443 ,所以外面访问都得带一个端口 8443 之类的。

    其实也还好,家里也用 8443 得了,内外访问体验一致。
    Inzufu
    Inzufu
    OP
    Aug 7, 2024 via Android
    45
    @forty @yinmin @iceheart @IvanLi127 @lovelylain 谢谢,那看来这就是最好的方案了。

    @NessajCN 现在不都讲究一个“零信任”的原则嘛,假设内网网络设备有问题,这样也保险。

    @busier @jenson47 自签证书浏览器不信任,而且编程访问的时候会因为证书校验失败报错。

    @MFWT 考虑过这种方法了,但是我自己也不敢绝对保证自签证书私钥的安全(最起码不能像权威 ca 机构那样保证),所以还是没有信任自己的证书。
    busier
    busier
    Aug 7, 2024
    46
    @Inzufu 自己 CA 加到受信任证书列表啊。加一次 CA 根证书就可以了,又不是让你用自签证书每次自签都要加信任

    再说人家企业用 AD 域的,不是也 DC 配置自动下发企业 CA 的。
    chinni
    chinni
    Aug 7, 2024
    47
    acme dns 验证下就好了 直接 dns 记录 写内网呗 弄个泛域名就好了
    n18255447846
    n18255447846
    Aug 7, 2024
    48
    公网 ip+域名申请的 ssl 证书可以用吧,内网改下 dns 不就得了。自签名的证书主要是信任问题,公网正常申请的证书拿来即用
    mengyx
    mengyx
    Aug 7, 2024 via Android
    49
    我们是专门注册一个域名,然后使用 ACME DNS Challenge 签发证书
    mengyx
    mengyx
    Aug 7, 2024 via Android
    50
    @mengyx 然后在域名的权威 DNS 内将域名解析到内网 IP
    zbowen66
    zbowen66
    Aug 7, 2024 via iPhone❤️1
    51
    我的设备太多,自签证书要一个一个安装到设备,太麻烦,所以我来真的,Certbot 自动续签,一步到位。
    zbowen66
    zbowen66
    Aug 7, 2024 via iPhone
    52
    @lcy630409 #5 有些服务比如 bitwarden 强制要求 https ,还有浏览器不允许 https 网页上的插件或脚本请求 http 服务
    815979670
    815979670
    Aug 7, 2024❤️1
    53
    从安全的角度来说还是有的,之前我从自身的项目需求出发 总结过一篇博客 https://www.dbkuaizi.com/archives/381.html
    smi1eya
    smi1eya
    Aug 7, 2024❤️1
    54
    是担心内网嗅探吗?如果有访客,弄个访客网络呢,还是其他考虑。
    我是为了 bitwarden ,弄得 duckdns 配合 Nginx Proxy Manager ,优点就是不用弄证书,缺点就是 duckdns.org 的后缀。
    Twnysta
    Twnysta
    Aug 7, 2024❤️1
    55
    内网 ip 如果是固定的话,买一个域名,然后解析地址改成内网地址,然后可以使用 dns api 脚本去签免费的证书。
    sunmker
    sunmker
    Aug 7, 2024❤️1
    56
    因为想要用 js 的复制到剪贴板功能,chrome 说不是 https 不让用
    然后绕了一大圈,上了 https ,谷歌还是说我 [此站点不安全] ,用是能用了,就是有点丑
    lisongeee
    lisongeee
    Aug 7, 2024❤️1
    57
    浏览器下非 https/localhost 的域名的 js 环境缺失了很多对象和功能,如果不在意这些功能,就可以不用 https
    CS50
    CS50
    Aug 7, 2024
    58
    用 nip.io ,比如访问 127.0.0.1 ,改成 127.0.0.1.nip.io 就行
    bkdlee
    bkdlee
    Aug 7, 2024
    59
    我用的是子域名,做了反向代理。然后就能签证书了。
    kiritoxkiriko
    kiritoxkiriko
    Aug 7, 2024
    60
    @wzw #22 我们这边是纯内部服务用一个域名,仅内网 dns 解析。内外混合是另一个域名,内网和外网解析的 ip 不一样,纯外部服务还有一个对外的域名
    dzdh
    dzdh
    Aug 7, 2024
    61
    自己做 ca 呗
    hxtheone
    hxtheone
    Aug 7, 2024 via iPhone
    62
    自有域名, 内网用 openwrt 接管 dns 解析到内网, caddy 加一层反代上 https 然后自动续签, 无脑得很, 而且可以做到内外网用同样的域名访问无缝切换
    libook
    libook
    Aug 7, 2024❤️1
    63
    有的服务要求必须 HTTPS ,以及一些浏览器 API 不走 HTTPS 不能用。

    可以走 DNS Challenge ,可以参考这个 https://letsencrypt.org/docs/challenge-types/#dns-01-challenge
    hzwzo1
    hzwzo1
    Aug 7, 2024❤️1
    64
    内网 dns 服务器配置域名解析到本地 ip 就可以了,外网解析到暴露的公网 ip ,这样内外网体验一样
    laminux29
    laminux29
    Aug 7, 2024❤️1
    65
    1.HTTPs 是用来保障安全的,当然要加,而且现在已经是标准了。

    2.内网自用的场景,直接自签就行了。自建一个 CA ,然后用 CA 给服务或服务器自签证书。每台新设备入网时,把 CA 的证书导入到 CA 区域就行。
    Inzufu
    Inzufu
    OP
    Aug 7, 2024 via Android
    66
    感谢各位的建议,最后的方案是把自己域名的 *.internal.example.com 在内网 dns 服务器中解析到了本地 ip 地址。
    证书用了 let's encrypt 签发。
    要让浏览器信任证书,看来没有更简单的办法啦。
    imydou
    imydou
    Aug 8, 2024 via iPhone
    67
    我们是内网部署的 caddy ,所有流量通过 caddy 转发
    murchef
    murchef
    Aug 8, 2024
    68
    内网有个 bitwarden 自建,我就 docker 起 NPM ,用 DNS 认证一个 Let's Encrypt 证书(自己要有域名),然后 NPM 做个反代指向 bitwarden ,最后路由器( ADG HOME )把域名指向 NPM 就好了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5553 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 138ms · UTC 02:21 · PVG 10:21 · LAX 18:21 · JFK 21:21
    ♥ Do have faith in what you're doing.