在工作中,我被要求研究为 WebSocket 聊天应用程序创建参考拓扑,其中包括面向 Web 的前端服务器和后端之间的代理。目前,我仍然在同一台服务器上运行前端和后端进行开发,但我暂时将 WebSockets 设置为指向代理,该代理位于实验室中完全独立的服务器上。两台服务器都在内部网络上,并且每台服务器都有一个单独的自签名证书。
当我通过 TLS 测试 WebSocket 时,由于证书是自签名的(没有显示任何异常对话),直到我直接连接到代理并为证书设置异常,它才失败。在那之后,它工作得非常好,但实际上可能不允许访问者这样做。所以,我需要找出如何同时证明两者。
据我所知,这样做的主要方法是:
- 将代理和前端放在不同的子域上(例如frontend.domain.com和proxy.domain.com),并为站点使用通配符证书。这在实验室中使用起来会更快、更容易,但 IETF不鼓励这样做。
- 使用具有主题备用名称的单个证书,并在www.mydomain.com的 SAN 字段下包括frontend.mydomain.com和proxy.mydomain.com。据我所知,这与担保流氓/错误域的问题相同。
- 对两台服务器使用完全独立的证书,就像我已经在做的那样。使用起来更麻烦,尤其是使用自签名证书,但如果一个域受到损害,那只是一个故障点。我的主要问题是,如果代理和前端证书不是自签名的,这更有可能起作用吗?
上面有什么我错过的,还是有其他方法?
编辑 22/07/2015:顺便说一句,在通过相同机制发送 XMLHttpRequest 时,我发现我必须关闭代理和后端之间的证书验证以允许 SSL 握手继续进行,所以我想知道如果我的自签名证书是问题的真正原因。但是,这可能无法解决我上面的问题。