做了四年多的游戏服务端,对 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.com 、srv2.example.com...。但即使这样,貌似申请域名的时候二级域名的数量是有限的,即使供应商那边不限制,每增加一个域名,就需要运维去绑定一下 IP,不仅麻烦还有个时效的问题。而且公司购买的服务器是根据业务来增减的,这非常不灵活。
PS:我所在的项目组并不是 H5,具体需求我并不清楚。只是这几天隔壁项目组和运维撕逼了很久,自己旁边听到了也想了下这个问题,也没有好的解决方案。运维因为技术这边出的方案太复杂,部署容易出错,拒绝执行中...
谢谢大家回复
其实使用HTTPS,技术上不没问题的。只是部署的问题。
因为现在服务器太多,而证书只能绑定域名,服务器又是不固定的,域名绑定IP将会是个体力活,这一块控制权还不在自己手里。
另外我记得域名申请的时候,子域名数量有是有限的吧
1
0ZXYDDu796nVCFxq 2017-09-07 00:45:58 +08:00 via iPhone
1. 标记为混合内容,不安全。最近两三年的浏览器应该会拒绝加载图片之外的资源,就是说无法正常访问。
2. 其实和 HTTP 部署差别不大。 |
2
changnet OP @gstqc https 服务端这边还是可以实现的,毕竟现成的库太多,顶多承载量少些。但是证书那个问题头疼,服务器太多,普通 web 部署应该不会有这么多服务器的。
|
3
ShareDuck 2017-09-07 00:54:48 +08:00 via Android
第 2 个问题,用自己的 DNS 服务器即可,无限二级域名,可以动态调整。如果都能够做到自适应部署服务器了,那这个应该毫无难度才对。
|
4
fcka 2017-09-07 01:16:11 +08:00 via Android
浏览器中发出的 socket 指的是 websocket ?
|
6
ss098 2017-09-07 01:50:24 +08:00 via Android
通配符证书可以满足你的证书需求,而你说的叫多域名证书。
|
7
ihacku 2017-09-07 02:39:04 +08:00 via iPhone
一般泛域名证书是不限制二级域名数量嗯吧
|
8
asdf123101 2017-09-07 05:52:27 +08:00 via Android
1. 暂时可以可以设置 opaque response 从 HTTPS 往 http 通信,但这个方式不被鼓励,再往后应该会被干掉。现在最鼓励的就是 https everything,具体在游戏这方面怎么应用实施难度不清楚。
2. 有 wild card certificate,会贵一点,但是可以直接解决问题。 |
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 的连接部分,后面的数据帧是不会加密的。 |
10
bear2017 2017-09-07 07:49:04 +08:00 via Android
https 的话 websocket 用 wss://,证书的话可以用通配符。
最近发现 https 加载要比加载 http 快多了,用 https 协议的时候浏览器会采用 http/2 传输(多路复用),速度的确快了很多,特别是图片加载这一块。关键是证书安装吧。。。 |
11
ivyliner 2017-09-07 10:53:01 +08:00
1. 不可以. 浏览器要求只能调用 >= 当前页面安全级别的地址. 所以 https 页面是不能调用 http 的
2. 购买一个通配符证书就可以了, 然后你爱用多少个子域名都可以, 前提是父域名不需要一致. 这些运维应个很了解了的. |
12
choury 2017-09-07 12:23:37 +08:00 via Android
都说了通配符,谁管你用多少域名,你自己搞个 dns,想要多少子域名有多少,不想自己搞就买别家的专业版,这个数量限制就是看你给多少钱了
|
13
cokll 2017-09-07 18:05:27 +08:00
阿里云 ecs 镜像复制,没毛病,简单易用
|