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

自签名 SSL,浏览器提示不安全

  •  
  •   20ng21 · 2021-08-23 17:31:33 +08:00 · 3599 次点击
    这是一个创建于 1184 天前的主题,其中的信息可能已经有所发展或是发生改变。
    请教各位大佬,内网网站使用自签名 SSL,客户要求去除浏览器的不安全提示,请问有什么解决办法吗?
    要求任意客户端打开都不能有不安全提示,所以预先在客户端上安装 CA 证书的方式应该不行。
    第 1 条附言  ·  2021-08-23 18:04:27 +08:00
    哦,对了,一个局域网可能有多台设备,都是通过各自的 ip 地址访问的,所以域名映射应该不行。⊙﹏⊙
    32 条回复    2021-10-31 17:32:13 +08:00
    Xusually
        1
    Xusually  
       2021-08-23 17:33:57 +08:00
    没有办法
    内网也可以使用可信任 CA 签发的 ssl 证书呀,ip 证书是不好弄,域名证书,特别是单域名 dv 的证书基本上是免费的,你申请好,内网域名解析到内网 ip 还不是一样用?
    Vegetable
        2
    Vegetable  
       2021-08-23 17:43:00 +08:00
    最后发现使用 http 成了唯一解...
    AoEiuV020
        3
    AoEiuV020  
       2021-08-23 17:47:46 +08:00
    不管内不内网,都一样搞个域名和受信任的证书就可以,
    20ng21
        4
    20ng21  
    OP
       2021-08-23 17:48:01 +08:00
    @Xusually #1 没有域名,只有 ip,难受~
    Xusually
        5
    Xusually  
       2021-08-23 17:49:23 +08:00
    @20ng21 😮‍💨,让客户去申请个域名不行么,内网解析一下,listen 一下,用又没什么影响
    lower
        6
    lower  
       2021-08-23 17:51:53 +08:00   ❤️ 1
    直接整个客户端壳子浏览器套网页展示。。。域名地址啥的也不需要看了。。而且还可以美其名曰:为了安全……
    20ng21
        7
    20ng21  
    OP
       2021-08-23 17:51:59 +08:00
    内网域名解析到内网 ip 的话岂不是还需要去修改客户那边的网络环境。 现在我们这边只是提供了一台嵌入式设备,客户通过 ip 访问,他那边的网络环境应该没法改。。
    20ng21
        8
    20ng21  
    OP
       2021-08-23 17:53:07 +08:00
    @lower #6 666,视角独特
    m2276699
        9
    m2276699  
       2021-08-23 17:53:59 +08:00
    网管改下域名的路由规则就可以映射到指定 ip
    20ng21
        10
    20ng21  
    OP
       2021-08-23 17:59:51 +08:00
    哦,对了,一个局域网可能有多台设备,都是通过各自的 ip 地址访问的,所以域名映射应该不行。⊙﹏⊙
    eason1874
        11
    eason1874  
       2021-08-23 18:01:26 +08:00
    如果客户机可以访问外网,直接给域名添加权威解析,地址就填内网 IP

    否则,要么安装证书,要么 HTTP
    Tumblr
        12
    Tumblr  
       2021-08-23 18:05:26 +08:00
    这是一个很( fei )有( chang )意( za )思( luan )的问题。。。
    1. 有内部 CA 么?如果是内部访问,有内部 CA 的话自己颁发一个就好了;
    2. 有集中管理环境么?如果有,推个证书也是可以的;
    3. 如果都没有,去申请个域名,申请个证书,这个是最快实现的方法。至于解析,你在 CF 上设置解析到 10.x.x.x 也不是不可以。
    20ng21
        13
    20ng21  
    OP
       2021-08-23 18:08:42 +08:00
    @Tumblr #12 什么叫推个证书呀
    PrinceofInj
        14
    PrinceofInj  
       2021-08-23 18:13:31 +08:00 via Android
    @20ng21 把需要的证书推倒客户端信任根签发
    20ng21
        15
    20ng21  
    OP
       2021-08-23 18:14:15 +08:00
    @PrinceofInj # 14 哦哦 多谢 明白了~
    abc612008
        16
    abc612008  
       2021-08-23 18:24:52 +08:00
    如果真的因此换 http 了还真的是为了表面上安全反而变得不安全。挺讽刺的。
    xylophone21
        17
    xylophone21  
       2021-08-23 19:01:17 +08:00
    1. 申请一个统一的域名,导向云引导页面,列出所有设备,让用户选择
    2. 设备与云通讯,选举一个跑网关,网关与各设备直接用自签证书保证安全
    3. 如果设备的局域网 IP 地址是变化的,通过 DDNS
    4. 如果设备出现在两个不同的局域网,在步骤 2 的云识别,把第二个局域网的导向第二个域名,同时在第二个局域网内也选举出一个网关

    仅提供一个思路,应该还有不完善的地方
    xylophone21
        18
    xylophone21  
       2021-08-23 19:05:04 +08:00
    @xylophone21

    想复杂了,简化一下:
    1. 每个设备上线时向云发送指令,让云帮忙分配一个域名,指向设备的内网地址(类似 DDNS ),下线是回收
    2. 用户总是打开你云端的页面,列出所有在线的设备,然后用临时域名跳转,访问设备
    xylophone21
        19
    xylophone21  
       2021-08-23 19:30:21 +08:00
    又想到一个方案:浏览器总是打开云上的一个页面,用类似 https://github.com/szimek/sharedrop 的方法找到局域网上的所有设备,进入设备时仍然访问云端页面,这个页面通过 WebRTC 与设备 P2P 传输数据,再交给前端渲染。

    sharedrop 的实现原理要看一下他的代码,关键是怎么猜测两个端在同一个局域网,不过对你的场景来说,假设所有的设备都在一个局域网,问题应该也不大,联不通的显示一下就好了。
    falcon05
        20
    falcon05  
       2021-08-23 19:39:44 +08:00 via iPhone
    申请个域名,指向内网 IP,一分钱也不想出的话也有免费的域名。
    iseki
        21
    iseki  
       2021-08-23 19:42:38 +08:00 via Android
    不行的,真有这种东西岂不是一定程度上给 mitm 大开方便之门?
    jim9606
        22
    jim9606  
       2021-08-23 19:59:03 +08:00
    无外部依赖、可以用裸 IP 、麻烦的做法:内网部署私有 CA,内网客户端系统安装私有 CA 证书为信任根,可以解决浏览器问题。

    有外部依赖、只能用域名、相对省事的方法:注册一个域名并找一个支持 DNS API/RFC2136 的域名解析商,用 DNS-TXT 验证的方式申请 Let's Encrypt 域名证书(或其他 ACME 兼容的公共 CA )。这个验证方式并不要求内网服务器暴露。
    Showfom
        23
    Showfom  
       2021-08-23 20:13:32 +08:00
    这个问题简单

    首先,你需要一段公网 IP,至少需要一个 /24 起步

    然后在公网上广播上去并使用,并给需要的 IP 申请证书

    然后在路由器里把公网 IP 设置成内网 IP 段来用,就直接劫持自己的这段 IP

    公网的 IP 只要打开 80 和 443 端口是可以申请证书的
    crystom
        24
    crystom  
       2021-08-23 21:24:29 +08:00   ❤️ 1
    xip.io 可以把 ip 做成域名,就有人搞了个 https://sslip.io/ 这个公开部署的可能已经被吊销了,但是私有部署是没问题的
    crystom
        25
    crystom  
       2021-08-23 21:25:21 +08:00
    192.168.20.46.xip.io resolves to 192.168.20.46 就这个例子
    yeqizhang
        26
    yeqizhang  
       2021-08-23 22:03:13 +08:00 via Android
    用 ip 应该没办法,只能在每个客户机上安装证书。也见过别人是这么搞,在登陆界面给个安装文件的下载
    Mutoo
        27
    Mutoo  
       2021-08-23 23:06:37 +08:00
    分享一个我在项目里用的方案 TL,DR:

    1) 脚本自生成证书,绑定 localhost (开发用)+ *.local mDNS 地址(内网访问)+ <内网 IP>.nip.io (以备 mDNS 失效)
    2) 提供 http://网址 /CA 用于下载证书

    开发者只要运行一次脚本,生成证书并使用该证书部署网站即可。
    用户只要第一次手动下载证书并信任即可。

    用到了 nip.io 这个 wildcard dns 服务。

    https://github.com/mutoo/axidraw-web#self-signed-cert
    Mutoo
        28
    Mutoo  
       2021-08-23 23:09:01 +08:00
    @Mutoo 这个方案支持同一证书添加多个 IP,也支持子证书。另外由于是根证书+子证书的形式。客户端只要下载根证书公钥,即使新增 IP 的话也不需要重复下载信任证书的过程。
    20ng21
        29
    20ng21  
    OP
       2021-08-24 08:55:40 +08:00
    感谢各位提供的建议。
    我打算在登录页面弄个证书下载看看 😂
    LukeChien
        30
    LukeChien  
       2021-08-24 13:19:41 +08:00 via Android
    要不你们公司申请个 CA 吧
    BitCert
        31
    BitCert  
       2021-09-18 22:10:59 +08:00
    公网 IP 好解决,内网 IP 只能搞 CFCA 证书,我们这边的证书是支持公网 IP 的,全球信任
    mingtdlb
        32
    mingtdlb  
       2021-10-31 17:32:13 +08:00
    客户端导证书为啥我还是提示不安全...能贴下自签命令 openssl 不
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1163 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 18:46 · PVG 02:46 · LAX 10:46 · JFK 13:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.