V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
changnet
V2EX  ›  问与答

关于 HTTPS 的部署问题

  •  
  •   changnet · 2017-09-07 00:35:21 +08:00 · 3216 次点击
    这是一个创建于 2640 天前的主题,其中的信息可能已经有所发展或是发生改变。

    做了四年多的游戏服务端,对 web 的东西比较陌生。最近 H5 游戏兴起,公司内也有了不少 H5 项目组。H5 是 web 标准,就免不了被注入广告的问题。所以不少平台要求新上的游戏,采用 HTTPS。但采用 HTTPS 会有几个问题。

    1.H5 游戏主要分为资源加载和服务器通信两部分。资源加载是普通的 web,只需要按 HTTPS 部署,不会有太大的问题。与服务器通信则较为麻烦,是采用 websocket 或者 socket.io 这种原生的 socket 与服务器进行二进制数据交互。由于 ARPG 类游戏通信量巨大,在完成验证后并没有加密的需求,所以这块并不想改动。现在想知道,在浏览器中,主站是 HTTPS 的,然后用 js 发起了一个非 HTTPS 的 socket 连接(这个 socket 并不是以 http 报文通信),浏览器是否会把这个网站标记为"不安全"或者“并非完全安全”。

    2.证书问题。国内很多都是小服运营,随便打开一个游戏,都开了几千个服务器。这意味着,高峰时将会有几百台物理服务器(或云服务器),对应几百个 IP。而证书是对应域名的,普通证书一个证书对应一个域名显然不能用。通配证书似乎可能一个证书对应多个二级域名,比如对应 srv1.example.comsrv2.example.com...。但即使这样,貌似申请域名的时候二级域名的数量是有限的,即使供应商那边不限制,每增加一个域名,就需要运维去绑定一下 IP,不仅麻烦还有个时效的问题。而且公司购买的服务器是根据业务来增减的,这非常不灵活。

    PS:我所在的项目组并不是 H5,具体需求我并不清楚。只是这几天隔壁项目组和运维撕逼了很久,自己旁边听到了也想了下这个问题,也没有好的解决方案。运维因为技术这边出的方案太复杂,部署容易出错,拒绝执行中...

    第 1 条附言  ·  2017-09-07 11:47:30 +08:00

    谢谢大家回复

    其实使用HTTPS,技术上不没问题的。只是部署的问题。

    因为现在服务器太多,而证书只能绑定域名,服务器又是不固定的,域名绑定IP将会是个体力活,这一块控制权还不在自己手里。

    另外我记得域名申请的时候,子域名数量有是有限的吧

    13 条回复    2017-09-07 18:05:27 +08:00
    0ZXYDDu796nVCFxq
        1
    0ZXYDDu796nVCFxq  
       2017-09-07 00:45:58 +08:00 via iPhone
    1. 标记为混合内容,不安全。最近两三年的浏览器应该会拒绝加载图片之外的资源,就是说无法正常访问。
    2. 其实和 HTTP 部署差别不大。
    changnet
        2
    changnet  
    OP
       2017-09-07 00:49:28 +08:00
    @gstqc https 服务端这边还是可以实现的,毕竟现成的库太多,顶多承载量少些。但是证书那个问题头疼,服务器太多,普通 web 部署应该不会有这么多服务器的。
    ShareDuck
        3
    ShareDuck  
       2017-09-07 00:54:48 +08:00 via Android
    第 2 个问题,用自己的 DNS 服务器即可,无限二级域名,可以动态调整。如果都能够做到自适应部署服务器了,那这个应该毫无难度才对。
    fcka
        4
    fcka  
       2017-09-07 01:16:11 +08:00 via Android
    浏览器中发出的 socket 指的是 websocket ?
    changnet
        5
    changnet  
    OP
       2017-09-07 01:47:45 +08:00 via iPad
    @fcka 是的。通过 websocket 创建一个长连接到服务器
    ss098
        6
    ss098  
       2017-09-07 01:50:24 +08:00 via Android
    通配符证书可以满足你的证书需求,而你说的叫多域名证书。
    ihacku
        7
    ihacku  
       2017-09-07 02:39:04 +08:00 via iPhone
    一般泛域名证书是不限制二级域名数量嗯吧
    asdf123101
        8
    asdf123101  
       2017-09-07 05:52:27 +08:00 via Android
    1. 暂时可以可以设置 opaque response 从 HTTPS 往 http 通信,但这个方式不被鼓励,再往后应该会被干掉。现在最鼓励的就是 https everything,具体在游戏这方面怎么应用实施难度不清楚。
    2. 有 wild card certificate,会贵一点,但是可以直接解决问题。
    plantain
        9
    plantain  
       2017-09-07 07:06:14 +08:00   ❤️ 1
    我刚才测试了一下,https 的页面是可以正常连 ws://开头的 websocket 的服务的(可以通过这个地址测试: https://plantain-00.github.io/ws-tool/)

    不过常规的实践是,websocket 连接时发出的请求是 http 协议(可以是 http 或 https,分别对应 ws:// 和 wss://,后者会对通信加密,连接的请求可以携带 cookie、token 等用于身份验证,身份验证失败可以直接断开连接,保证之后的数据帧的安全),之后的双工通信消息则是通过 tcp 来发送的(不涉及 http,也就没有 https 的概念)。

    所以没必要那么做,websocket 服务直接使用 wss:// 就好,只会加密 websocket 的连接部分,后面的数据帧是不会加密的。
    bear2017
        10
    bear2017  
       2017-09-07 07:49:04 +08:00 via Android
    https 的话 websocket 用 wss://,证书的话可以用通配符。
    最近发现 https 加载要比加载 http 快多了,用 https 协议的时候浏览器会采用 http/2 传输(多路复用),速度的确快了很多,特别是图片加载这一块。关键是证书安装吧。。。
    ivyliner
        11
    ivyliner  
       2017-09-07 10:53:01 +08:00
    1. 不可以. 浏览器要求只能调用 >= 当前页面安全级别的地址. 所以 https 页面是不能调用 http 的
    2. 购买一个通配符证书就可以了, 然后你爱用多少个子域名都可以, 前提是父域名不需要一致.
    这些运维应个很了解了的.
    choury
        12
    choury  
       2017-09-07 12:23:37 +08:00 via Android
    都说了通配符,谁管你用多少域名,你自己搞个 dns,想要多少子域名有多少,不想自己搞就买别家的专业版,这个数量限制就是看你给多少钱了
    cokll
        13
    cokll  
       2017-09-07 18:05:27 +08:00
    阿里云 ecs 镜像复制,没毛病,简单易用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3483 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 04:56 · PVG 12:56 · LAX 20:56 · JFK 23:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.