localhost或127.0.0.1的第三方签名SSL证书?

Rim*_*mer 24 ssl embeddedwebserver ssl-certificate

在不泄漏太多信息的情况下,我需要设置一个旨在供整个互联网上的最终用户使用的Web服务器系统.

用例是这样的:

  • 当连接到系统时,最终用户(通常)在其本地防火墙后面的家中.
  • 该系统由我们托管的远程服务器组成,严格通过https(使用SSL)
  • 授权机制要求远程服务器上的用户帐户自我创建,该帐户在成功创建帐户后,将需要将一个软件下载并安装到最终用户的计算机.该软件包含本地Web服务器等.
  • 此"本地"Web服务器还必须仅允许https连接到用户的浏览器.

由于分布式软件将成为每个用户机器上的唯一Web服务器,因此我不确定如何或甚至是否可能获得第三方签名的SSL证书,该证书在用户连接时不会导致可信错误通过网络浏览器.当然,它可以使用自签名SSL证书,但其目的是避免浏览器警告,以便最终用户隐含地"信任"来自通过SSL运行其Web服务器的自己的应用程序的数据.

这可能吗?

Coo*_*J86 24

本地主机

永远不会为localhost颁发适当的https证书.这是严格禁止的.因为原因.

简而言之:

  • 错误配置的设备实际上存在,在解决localhost之前等待查找/etc/hosts
  • 如果路由器定义localhost.foo.local它可能导致localhost错误解决(您可能之前看到过这类错误)

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

localhost.YOURSITE.com(指向127.0.0.1)

取代实际localhost证书,我做Eugene建议 - 在公共领域创建127.0.0.1记录.

您可以localhost.YOURSITE.com通过https://greenlock.domains获取via Let's Encrypt的免费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说明:

  • 会话,localstorage,indexeddb等由域共享
  • 更改端口不会改变其共享

是你自己的根证书

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

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


Sar*_*tha 15

我有同样的要求.所以你必须使用SSL的原因是因为几乎每个浏览器现在barfs如果你使用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.

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

  • 这是一个很好的主意(DNS记录指向127.0.0.1).虽然将你的密钥/证书与应用程序捆绑在一起有点苛刻,但我认为这几乎是唯一的出路.你如何处理到期?让应用程序下载新证书吗? (2认同)