关于 HTTPS 的部署问题

2017-09-07 00:35:21 +08:00
 changnet

做了四年多的游戏服务端,对 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,具体需求我并不清楚。只是这几天隔壁项目组和运维撕逼了很久,自己旁边听到了也想了下这个问题,也没有好的解决方案。运维因为技术这边出的方案太复杂,部署容易出错,拒绝执行中...

3031 次点击
所在节点    问与答
13 条回复
gstqc
2017-09-07 00:45:58 +08:00
1. 标记为混合内容,不安全。最近两三年的浏览器应该会拒绝加载图片之外的资源,就是说无法正常访问。
2. 其实和 HTTP 部署差别不大。
changnet
2017-09-07 00:49:28 +08:00
@gstqc https 服务端这边还是可以实现的,毕竟现成的库太多,顶多承载量少些。但是证书那个问题头疼,服务器太多,普通 web 部署应该不会有这么多服务器的。
ShareDuck
2017-09-07 00:54:48 +08:00
第 2 个问题,用自己的 DNS 服务器即可,无限二级域名,可以动态调整。如果都能够做到自适应部署服务器了,那这个应该毫无难度才对。
fcka
2017-09-07 01:16:11 +08:00
浏览器中发出的 socket 指的是 websocket ?
changnet
2017-09-07 01:47:45 +08:00
@fcka 是的。通过 websocket 创建一个长连接到服务器
ss098
2017-09-07 01:50:24 +08:00
通配符证书可以满足你的证书需求,而你说的叫多域名证书。
ihacku
2017-09-07 02:39:04 +08:00
一般泛域名证书是不限制二级域名数量嗯吧
asdf123101
2017-09-07 05:52:27 +08:00
1. 暂时可以可以设置 opaque response 从 HTTPS 往 http 通信,但这个方式不被鼓励,再往后应该会被干掉。现在最鼓励的就是 https everything,具体在游戏这方面怎么应用实施难度不清楚。
2. 有 wild card certificate,会贵一点,但是可以直接解决问题。
plantain
2017-09-07 07:06:14 +08:00
我刚才测试了一下,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
2017-09-07 07:49:04 +08:00
https 的话 websocket 用 wss://,证书的话可以用通配符。
最近发现 https 加载要比加载 http 快多了,用 https 协议的时候浏览器会采用 http/2 传输(多路复用),速度的确快了很多,特别是图片加载这一块。关键是证书安装吧。。。
ivyliner
2017-09-07 10:53:01 +08:00
1. 不可以. 浏览器要求只能调用 >= 当前页面安全级别的地址. 所以 https 页面是不能调用 http 的
2. 购买一个通配符证书就可以了, 然后你爱用多少个子域名都可以, 前提是父域名不需要一致.
这些运维应个很了解了的.
choury
2017-09-07 12:23:37 +08:00
都说了通配符,谁管你用多少域名,你自己搞个 dns,想要多少子域名有多少,不想自己搞就买别家的专业版,这个数量限制就是看你给多少钱了
cokll
2017-09-07 18:05:27 +08:00
阿里云 ecs 镜像复制,没毛病,简单易用

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/388791

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX