首页 > 解决方案 > 用于在多家公司部署的 Intranet 应用程序的 SSL

问题描述

我有通过 https 服务的节点应用程序。该应用程序通过内部网络提供。我记得在 Linux 命令行上生成 SSL 密钥并且它们已经过期。

我有在多家公司安装这个应用程序的愿望。它将在每个公司的 int run et 上运行,但我确实希望可以远程访问该应用程序(通过在公司防火墙上设置一些端口转发器)。

SSL 密钥很痛苦。我希望对通信进行加密,但因为我自己生成 SSL 密钥,所以用户必须通过一些可怕的浏览器警告才能开始使用该应用程序。

如果我希望这些警告消失,我是否必须为应用程序运行的每个 Intranet 购买单独的 SSL 密钥以防止用户看到这些警告?我可以使这些密钥的到期时间为 3000 年(因此它们实际上永远不会过期)吗?我喜欢https,但我鄙视为官方密钥付费。原因如下:

使用自行生成的密钥,通信加密与购买的密钥一样安全。然而,如果用户接受我生成的证书,浏览器会让用户认为他会感染病毒。当有时您有其他加密原因时,浏览器会将所有内容都视为网上银行。好吧,抱怨够了。

如果您有一个主要是 Intranet 应用程序的应用程序,但确实希望允许远程访问,并且该应用程序将在许多公司中安装,并且您希望该应用程序通过 HTTPS 运行,您如何减轻 SSL 的负担密钥管理?

加密不如网上银行重要,但我想拥有它。因此,理想情况下,我想要一个我可以自己生成的密钥(以避免费用),或者我购买一个密钥,但我希望该密钥实际上永不过期,并且我希望它为多个安装服务(在不同的公司)我的应用程序。我想要不关心域名的关键。我想要加密通信,但验证我是我所说的那个人对我来说根本不重要。

如何以避免浏览器警告的方式部署这样的应用程序?

请指教。

标签: node.jssslencryptionhttpsintranet

解决方案


我已经就你的另一个问题发布了答案,但我在这里看到了一些我认为值得解决的误解。

我有在多家公司安装这个应用程序的愿望。它将在每个公司的 Intranet 上运行,但我确实希望可以远程访问该应用程序(通过在公司防火墙上设置一些端口转发器)。

请注意,在安全方面,这实际上与仅在 Internet 上运行您的应用程序相同。试图依靠隐藏在某个非标准端口上的应用程序被称为“通过默默无闻的安全”,这是一种错误的安全感。

如果我希望这些警告消失,我是否必须为应用程序运行的每个 Intranet 购买单独的 SSL 密钥以防止用户看到这些警告?

您的应用程序需要一个证书,并且您需要访问者信任您的证书。您可以通过两种方式做到这一点:

  • 从 CA 获取证书,这些证书开箱即用。
  • 制作您自己的证书并分发它们
    • 手动
    • 通过一些集中的方式自动化

在您的其他问题中更详细地回答了这些选项。

我可以使这些密钥的到期时间为 3000 年(因此它们实际上永远不会过期)吗?

如果您制作自己的证书,则可以。但你不应该。证书背后的密码学年代久远,攻击者变得更强大,机器被入侵,密钥被盗。理论上,我们对此有撤销权,实际上它是……毛茸茸的。这假设您知道存在问题。让证书在一段时间后自然过期可以稍微缓解这些问题。因此,强烈建议不要持有 3000 年的证书。

如果您从 CA 获得证书,则不能,因为他们不会给您证书,原因如上所述。证书的典型有效期为一年。事实上,浏览器正在移动阻止长期存在的证书。

我喜欢https,但我鄙视为官方密钥付费。

然后使用免费证书。它们由多方提供。我喜欢让我们加密

原因如下:使用自行生成的密钥,通信加密与购买的密钥一样安全。

不,这不对。至少,如果浏览器抱怨,则不会。

只有在证书可以信任的情况下,通道的加密才是安全的。如果您使用自签名证书,浏览器将无法信任该证书(因此会出现警告),这意味着可能会发生中间人攻击,就像普通 HTTP 一样。攻击者可以简单地替换他们自己的证书;您的客户无法知道证书已被伪造。

这是 CA 进来的;它们为浏览器提供了一种合理信任证书的方法。

您可以通过自己分发自签名证书来避免此问题;如果您正确执行此操作,则连接将非常安全。但这需要更多的工作,而且扩展性很差,这就是为什么我们在不平凡的情况下使用 CA。

然而,如果用户接受我生成的证书,浏览器会让用户认为他会感染病毒。当有时您有其他加密原因时,浏览器会将所有内容都视为网上银行。好吧,抱怨够了。

浏览器对此发表意见是非常正确的;盲目接受不受信任的证书会产生虚假的安全感;它几乎不比普通的 HTTP 好。这很少是正确的做法,而且几乎总是表明存在严重问题。把用户吓跑是最好的。

所以,理想情况下,我想要一把我可以自己生成的钥匙(以避免费用),或者我购买一把钥匙

您总是自己生成密钥;我认为您的意思是证书;)

无论如何,使用CA。有免费的。

但我希望该密钥几乎永不过期

不会发生

我希望它为我的应用程序提供多个安装服务(在不同的公司)。

馊主意; 您希望尽可能地将您的客户与其他客户的妥协隔离开来,尤其是当您要分发自己的证书时。

我想要不关心域名的关键。

和上面一样。

我想要加密通信,但验证我是我所说的那个人对我来说根本不重要。

验证是加密通信的组成部分;这不是可选的。

如何以避免浏览器警告的方式部署这样的应用程序?

这在你的另一个问题中得到了回答。


推荐阅读