27

在不透露太多信息的情况下,我需要设置一个旨在供整个 Internet 上的最终用户使用的 Web 服务器系统。

用例是这样的:

  • 连接到系统时,最终用户(通常)在家中位于本地防火墙后面。
  • 该系统由我们托管的远程服务器组成,严格通过 https(使用 SSL)
  • 授权机制需要在远程服务器上自行创建用户帐户,成功创建帐户后,需要下载一个软件并将其安装到最终用户的计算机上。除其他外,该软件还包含一个本地网络服务器。
  • 这个“本地”网络服务器也必须只允许 https 连接到用户的浏览器。

由于分布式软件将是每个用户计算机上的唯一 Web 服务器,我不确定如何或即使有可能获得在用户连接时不会导致可信性错误的第三方签名 SSL 证书。通过网络浏览器。当然,它可以使用自签名 SSL 证书,但想法是避免浏览器警告,以便最终用户将隐含地“信任”来自他们自己的应用程序的数据,这些应用程序通过 SSL 运行其网络服务器。

这可能吗?

4

5 回答 5

27

本地主机

您永远不会获得适用于 localhost 的正确 https 证书。这是严格禁止的。因为原因

简而言之:

  • 实际上存在配置错误的设备,它们在解析本地主机之前等待查找/etc/hosts
  • 如果路由器定义了localhost.foo.local它可能会导致localhost解析不正确(您之前可能已经看到过此类错误)

您可以创建一个根证书然后创建一个所谓的“自签名”证书,由您创建的根 ca 签名。你仍然会看到丑陋的警告屏幕,但它会起作用。

localhost.YOURSITE.com(指向 127.0.0.1)

代替实际localhost证书,我按照 Eugene 的建议去做 - 在公共域上创建 127.0.0.1 记录。

localhost.YOURSITE.com您可以通过 Let's Encrypt 通过https://greenlock.domains获得免费的 HTTPS 证书。只需选择 DNS 选项而不是 HTTP 文件上传选项

将您的 localhost.MY-SLD.MY-TLD 指向 127.0.0.1

  • 购买*.localhost.example.com证书并为每个安装颁发一个秘密xyz.localhost.example.com(并将其包含在公共后缀列表中以防止对 example.com 的攻击)
  • 使用启用了 greenlock 的应用程序直接在客户端上(通过https://letsencrypt.org )动态生成此类证书(或将它们传递给客户端)

如果您未包含在 PSL 中,请注意:

  • 会话、本地存储、indexeddb 等由域共享
  • 更改端口不会改变它们的共享性

做你自己的根证书

更新:对于使用 ACME / Let's Encrypt 的greenlock之类的东西,这不再特别相关。

这可能是一个非常糟糕的主意,因为我们不希望用户习惯于随意安装 Root CA(我们知道联想的结果如何),但对于企业/克隆机器来说,这可能是一个合理的低预算选择。

于 2015-06-11T00:35:41.320 回答
15

我也有同样的要求。因此,您必须使用 SSL 的原因是,如果您使用 https 并尝试连接到 http 资源,即使 http 资源位于 localhost 上,这对我来说也很愚蠢,现在几乎每个浏览器都会出错。

由于 JS SOP,我们的 localhost web 服务器提供了一个 js 文件,然后 webapp 中的 JS 可以调用这个 localhost webserver。

所以我们让 local.example.com 指向 127.0.0.1 并且实际上为这个主机名购买了一个 SSL 证书。然后,我们将私钥发送到这个安装在用户计算机上的 Web 服务器中。是的,我们疯了。

所有这些实际上都非常有效。大约 6 个月以来,我们一直在以数百名用户的方式运行。

我们有时遇到的唯一问题是,当用户使用代理服务器时,这不能正常工作。请求被发送到代理服务器,它尝试连接到代理服务器上的 127.0.0.1,这显然不起作用。解决方法是向代理服务器配置添加排除项,以便绕过代理服务器对 local.example.com 的请求

当用户尝试使用 Citrix 或终端服务时,它会变得有点棘手。您必须确保每个用户的 Web 服务器在不同的端口上运行,然后将端口号告知您的远程 Web 服务器,以便在服务器上生成的页面将具有正确的端口号。幸运的是,我们还没有遇到这种情况。如今,似乎越来越多的人使用虚拟机而不是 Citrix。

你有没有找到更好的方法?

于 2014-03-07T18:51:10.950 回答
2

或许您可以让我们使用 GlobalSign 提供的这项服务(其他 CA 提供类似的服务)。简而言之,该产品让您拥有将由 GlobalSign 证书签名的 CA 证书(并为 localhost / 注册最终用户证书)。不过,成本可能很高(我相信他们会根据具体情况确定)。

于 2011-07-22T16:45:21.157 回答
1

由于您在本地主机上,您可以告诉您的浏览器信任您想要的任何证书。

为 localhost 创建一个自签名证书,并告诉您的浏览器信任它。

于 2016-12-28T05:05:17.180 回答
0

CoolAJ86提供的解决方案“将您的 localhost.MY-SLD.MY-TLD 指向 127.0.0.1”工作正常,您可以在此处看到更详细的说明:
PLEX 如何为所有用户执行 https

PS:我只是不知道这有多可持续,因为有类似情况的人的密钥被 CA 撤销,就好像密钥已被泄露一样。

于 2017-10-22T21:57:39.700 回答