Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
本地主机或127.0.0.1的第三方签名SSL证书?_Ssl_Ssl Certificate_Embeddedwebserver - Fatal编程技术网

本地主机或127.0.0.1的第三方签名SSL证书?

本地主机或127.0.0.1的第三方签名SSL证书?,ssl,ssl-certificate,embeddedwebserver,Ssl,Ssl Certificate,Embeddedwebserver,在不泄露太多信息的情况下,我需要设置一个web服务器系统,供互联网上的最终用户使用 用例是这样的: 连接到系统时,最终用户(通常)在其本地防火墙后面的家中 该系统由我们托管的远程服务器组成,严格通过https(使用SSL)运行 授权机制要求在远程服务器上自行创建用户帐户,在成功创建帐户后,将需要下载一个软件并安装到最终用户的计算机上。该软件包括一个本地Web服务器 此“本地”Web服务器还必须只允许https连接到用户的浏览器 由于分布式软件将是每个用户机器上唯一的web服务器,因此我不确定

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

用例是这样的:

  • 连接到系统时,最终用户(通常)在其本地防火墙后面的家中
  • 该系统由我们托管的远程服务器组成,严格通过https(使用SSL)运行
  • 授权机制要求在远程服务器上自行创建用户帐户,在成功创建帐户后,将需要下载一个软件并安装到最终用户的计算机上。该软件包括一个本地Web服务器
  • 此“本地”Web服务器还必须只允许https连接到用户的浏览器
由于分布式软件将是每个用户机器上唯一的web服务器,因此我不确定如何或是否可能获得第三方签署的SSL证书,当用户通过web浏览器连接到该证书时,该证书不会导致可信错误。当然,它可以使用自签名SSL证书,但其想法是避免浏览器警告,以便最终用户将隐式地“信任”来自通过SSL运行其Web服务器的应用程序的数据


这可能吗?

也许您可以让我们了解(其他CA提供类似的服务)。简言之,该产品允许您拥有一个CA证书(并为localhost/任何内容注册最终用户证书),该证书将由GlobalSign certificate签名。不过,成本可能很大(我相信他们是根据具体情况来确定的)

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

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

因此,我们让local.example.com指向127.0.0.1,并为这个主机名购买了一个SSL证书。然后,我们将私钥放在这个安装在用户计算机上的web服务器中。是的,我们疯了

所有这些实际上都非常有效。我们已经这样运行了大约6个月,有几百个用户

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

另一个有点棘手的场景是当用户尝试使用Citrix或终端服务时。您必须确保每个用户的web服务器在不同的端口上运行,然后将端口号告知远程web服务器,以便服务器上生成的页面具有正确的端口号。幸运的是,我们还没有遇到这个问题。现在似乎越来越多的人使用虚拟机而不是Citrix

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

localhost 您将永远不会获得本地主机的正确https证书。它是。因为

简言之:

  • 实际上,在野外存在配置错误的设备,它们在从
    /etc/hosts
    解析localhost之前等待查找
  • 如果路由器定义了
    localhost.foo.local
    ,它可能会导致
    localhost
    解析错误(您以前可能见过此类错误)
您可以创建一个根证书,然后创建一个所谓的“自签名”证书,由您创建的根ca签名。你仍然会看到丑陋的警告屏幕,但它会起作用

localhost.YOURSITE.com(指向127.0.0.1) 代替实际的
localhost
cert,我按照Eugene的建议,在公共域上创建一个127.0.0.1记录

通过让我们通过加密,您可以免费获得
localhost.YOURSITE.com
的HTTPS证书。只需选择DNS选项而不是HTTP文件上载选项

将localhost.MY-SLD.MY-TLD指向127.0.0.1
  • 购买
    *.localhost.example.com
    证书,并为每个安装颁发一个秘密
    xyz.localhost.example.com
    (并将其包含在公共后缀列表中,以防止对example.com的攻击)
  • 用于直接在客户端上动态(通过)生成此类证书(或将其传递给客户端)
如果您未包含在PSL中,请注意:

  • 会话、本地存储、indexeddb等由域共享
  • 更改端口不会改变它们的共享性
成为您自己的根证书 更新:对于使用ACME/Let's Encrypt之类的东西,这不再特别相关


这可能是一个非常糟糕的主意,因为我们不希望用户习惯于随意安装根CA(我们知道这一点),但对于公司/克隆计算机来说,这可能是一个合理的低预算选项。

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

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

works fine提供的解决方案“将您的localhost.MY-SLD.MY-TLD指向127.0.0.1”,您可以在此处看到更详细的解释:


PS:我只是不知道这有多可持续,因为他们的密钥被CA吊销了,就好像密钥被泄露了一样

这是否意味着我必须创建自己的CA才能工作?@Rimer为了避免客户端出现浏览器警告,您需要构建一个受信任的证书链,即部署的web服务器(将在客户端运行的服务器)中使用的证书必须