出于安全考虑,我可能做的不正确,所以请通知我。
用户访问站点(并被迫使用HTTPS)。有效证书。他们通过WSS连接到“中间人”服务器。第三方组织将普通的WS服务器公开到Internet,并将其公共地址/端口广播到“中间人”服务器,然后将其广播给用户。
因此,该HTTPS站点上的用户将获得一个URL,例如ws://203.48.15.199:3422
。我有什么办法可以允许这种连接发生?
一种这样的方法是允许“中间人”也成为代理-每个第三方服务器地址在启用WSS的Middeman服务器上分配一个路径。用户将连接到wss://example.com/somepath
,而我只需将其代理回不安全的第三方websocket。缺点是我必须维护该代理,这违背了允许第三方甚至运行自己的服务器的目的。
有什么想法吗?
答案 0 :(得分:1)
有什么办法可以允许这种连接发生?
这是active mixed content的一种形式。所有最近的浏览器such as Firefox和Google Chrome浏览器都禁止此类内容,就像它们禁止安全页面(HTTPS加载页面)加载不安全的JavaScript一样。
道理很简单:首先破坏了HTTPS的目的。
解决此问题的“正确”方法是也强制所有第3方在其网络套接字上使用HTTPS,并避免整个问题。
一种这样的方法是允许“中间人”也成为代理人
是的。您可以为要允许代理的第三方设置代理服务器。互联网上散布着许多nginx的例子。一个简单的例子可能是:
# untested configuration
server {
listen 443 ssl;
ssl_certificate /etc/ssl/certs/cert.pem;
ssl_certificate_key /etc/ssl/private/cert.key;
location /3rdpartyproxy {
proxy_pass http://203.48.15.199:3422;
proxy_http_version 1.1;
proxy_set_header Upgrade websocket;
proxy_set_header Connection upgrade;
}
}
类似的事情可能有用,但是请记住,这并不符合用户的最大利益。您的代理与第三方之间的连接仍然不安全,并且容易受到常规HTTP的所有相同攻击。
需要注意的另一件事是确保其他方没有错误使用您的代理。我见过有人用动态路径设置代理,并将该流量代理到任何地方。像这样:
ws://myproxy.example/203.48.15.199/3422
然后将Web服务器配置为将其代理到URL中的内容。这似乎是一个不错的解决方案,因为它将根据URL的不同来执行正确的操作。它的主要缺点是,除非您对代理进行了某种身份验证,否则任何人都可以使用它在任何地方代理流量。
总结:
如果我需要SSL,这是否意味着他们将无法仅发布要连接的IP?
获取HTTPS证书需要域名。更具体地说,获得IP地址证书是可能,但是与获得域名证书相比,这非常不寻常,而且要付出更多的努力。
负担多了?
多数情况下,这是一个意见问题,但这将意味着选择一个域名,进行注册,然后向注册服务商支付维持注册的费用。费用各不相同,但是如果一个域没有什么特别的,通常一个域每年的费用不到15美元。
公开HTTPS的过程是否可以完全自动化?
现在主要可以自动获取HTTPS证书。 Let's Encrypt免费提供HTTPS证书(实际上,免费,没有字符串,现在是非常流行的证书颁发机构)。他们的方法有些不同。他们颁发3个月的证书,但使用名为CertBot的软件来自动更新和安装证书。由于该过程是完全自动化的,因此证书的有效期并不重要,因为所有证书都将在后台自动更新。
还有其他使用此功能的Web服务器。 Apache supports ACME(让我们加密的协议)现在本地使用。 Caddy是另一台Web服务器,它使HTTPS配置达到了绝对的简单性。
对于您的第三方,您可以考虑给他们提供一些示例,这些示例具有针对各种Web服务器正确设置的HTTPS。
我想稍微介绍一下“ IP地址证书”的可能性,因为我觉得您对此有所怀疑。
证书的IP地址是可能的,但对于公共访问的网站来说是极为罕见的。 https://1.1.1.1是最近的一个例子。
最终,CA必须验证依赖方(请求证书的个人或组织)可以证明对IP地址的控制。 CA/B Requirements的第3.2.2.5节描述了如何完成此操作,但实际上,这要由CA来验证IP地址的所有权。因此,“域验证”证书不适用于具有IP地址的证书。取而代之的是,至少需要“组织验证”证书或OV。 OV证书的颁发更加严格,无法自动执行。除了证明IP地址的所有权外,您还需要提供依赖方身份的文件,例如个人的驾驶执照或组织的税收文件。
Let's Encrypt不会为IP地址颁发证书,因此您可能必须找到其他颁发该证书的CA,并可能需要为它们付费。为IP地址注册域名可能会更具成本效益。
我不知道有哪个CA可以像Let's Encrypt / CertBot这样的自动方式为IP地址颁发证书。
使用域名可提供更大的灵活性。如果需要更改IP地址,则只需更新DNS中的A / AAAA记录即可。如果该证书用于IP地址,则需要颁发新证书。
某些软件和浏览器的证书中存在IP地址的历史兼容性问题。
答案 1 :(得分:0)
一个想法,但是您仍然需要服务器充当反向代理的行为:为您的每个第三方实现thirdparty.example.com虚拟主机,而不是example.com/somepath。然后,您需要一个通配符证书* .example.com,但这可以防止人们尝试访问example.com/somepathdoesntexist