在不泄漏太多信息的情况下,我需要设置一个网络服务器系统,供整个互联网上的最终用户使用。
用例是这样的:
由于分布式软件将成为每个用户机器上的唯一Web服务器,因此我不确定如何甚至可能获得第三方签名的SSL证书,该证书在用户不会导致可信错误通过Web浏览器连接到它。当然,它可以使用自签名SSL证书,但其目的是避免浏览器警告,以便最终用户隐含地“信任”来自通过SSL运行其Web服务器的应用程序的数据。
这可能吗?
答案 0 :(得分:24)
您永远不会为localhost颁发适当的https证书。它是strictly forbidden。因为reasons。
简而言之:
/etc/hosts
解析localhost localhost.foo.local
,可能导致localhost
错误地解决(您之前可能已经看到过此类错误)您可以创建根证书,然后创建一个所谓的"自签名"证书,由您创建的根ca签名。你仍会得到丑陋的警告屏幕,但它会起作用。
代替实际的localhost
证书,我做的是Eugene建议的 - 在公共领域创建127.0.0.1记录。
您可以通过https://greenlock.domains通过加密获取localhost.YOURSITE.com
的免费HTTPS证书。只需选择DNS选项而不是HTTP文件上载选项
*.localhost.example.com
证书并为每个安装发出一个秘密xyz.localhost.example.com
(并将其包含在公共后缀列表中以防止对example.com的攻击)如果您未参加PSL说明:
更新:使用“greenlock”等使用ACME /让我们加密的内容,这已经不再特别重要了。
这可能是一个非常糟糕的主意,因为我们不希望用户习惯于不知不觉地安装Root CA(我们知道如何turned out for Lenovo),但对于公司/克隆机器,它可能是一个合理的低预算选择。
答案 1 :(得分:15)
我有同样的要求。所以你必须使用SSL的原因是因为几乎每个浏览器现在barfs如果你使用https并尝试连接到http资源,即使http资源在localhost上也是愚蠢的。
由于JS SOP,我们的localhost Web服务器提供了一个js文件,然后webapp中的JS可以调用这个localhost网络服务器。
因此我们将local.example.com指向127.0.0.1并实际为此主机名购买了SSL证书。然后,我们将私钥发送到此Web服务器中,该服务器安装在用户的计算机上。是的,我们疯了。
所有这些实际上都很有效。我们已经和几百名用户一起运行了大约6个月。
我们有时遇到的唯一问题是,当用户使用代理服务器时,这不起作用。请求被发送到代理服务器,它尝试连接到代理服务器上的127.0.0.1,这显然不起作用。解决方法是向代理服务器配置添加一个排除项,以便它绕过代理服务器以获取对local.example.com的请求
当用户尝试使用Citrix或终端服务时,另一个会变得有点棘手的情况。您必须确保每个用户的Web服务器在不同的端口上运行,然后通知您的远程Web服务器端口号,以便在服务器上生成的页面具有正确的端口号。幸运的是,我们尚未遇到此问题。现在似乎有更多的人使用虚拟机而不是Citrix。
你有没有找到更好的方法?
答案 2 :(得分:2)
可能你可以让我们this offering by GlobalSign(其他CA提供类似的服务)。简而言之,该产品允许您拥有CA证书(并注册localhost /的最终用户证书),这些证书将由GlobalSign证书签名。虽然成本可能很高(我相信他们会根据具体情况来确定)。
答案 3 :(得分:1)
由于您使用的是localhost,因此您可以告知浏览器信任您想要的任何证书。
为localhost制作自签名证书,并告知您的浏览器信任它。
答案 4 :(得分:0)
解决方案"将您的localhost.MY-SLD.MY-TLD指向127.0.0.1"由provided by CoolAJ86提供的工作正常,你在这里看到更详细的解释:
How PLEX is doing https for all its users
PS:我只是不知道这是多么可持续,因为someone with a similar scenario已将CA的密钥撤销,就像密钥已被泄露一样。