用于在多家公司部署的 Intranet 应用程序的 SSL

SSL For Intranet Applications Deployed at Multiple Companies

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

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

SSL 密钥很麻烦。我希望对通信进行加密,但由于我自己生成 SSL 密钥,用户必须先通过一些可怕的浏览器警告,然后才能开始使用该应用程序。

如果我想让这些警告消失,我是否必须为每个 int运行 应用程序 运行 购买一个单独的 SSL 密钥,以防止用户看到这些警告?我可以让这些密钥在 3000 年过期吗(这样它们实际上永远不会过期)?我喜欢 https,但我讨厌花钱购买官方密钥。原因如下:

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

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

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

我怎样才能以避免浏览器警告的方式部署这样的应用程序?

请指教

我已经在 your other question 上发布了一个答案,但我在这里看到了一些我认为值得解决的误解。

I have aspirations of installing this app at multiple companies. It will run on each company's intranet yet I do want the application to be accessible remotely (by setting up some port forwarders on the corporate firewall).

请注意,在安全方面,这实际上与 运行 您在互联网上的应用程序相同。试图依赖隐藏在某些非标准端口上的应用程序被称为 "security through obscurity",这是一种 错误的安全感

If I want these warning to go away, will I have to buy a separate SSL key for each intranet the app runs on in order to prevent the user from ever seeing these warnings?

您的应用程序需要一个证书,并且您需要访问者信任您的证书。您可以通过两种方式执行此操作:

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

这些选项在 your other question 中有更详细的回答。

Can I make the expiration of these keys year 3000 (so they never practically expire)?

如果您制作自己的证书,则可以。但你不应该。证书背后的密码学老化,攻击者变得更强大,机器被侵入,密钥被盗。从理论上讲,我们对此有撤销权,但在实践中它是……毛茸茸的。并且假设您 知道 存在问题。让证书在一段时间后自然过期可以稍微缓解这些问题。因此,非常不鼓励拥有 3000 年的证书。

如果您从 CA 获得证书,则不能,因为他们不会为您提供证书,原因如上。证书的典型有效期为一年。事实上,浏览器是 moving to block 长期有效的证书。

I like https, but I despise paying money for official keys.

然后使用免费证书。它们由几方提供。 I like Let's Encrypt.

Here's why: With self generated keys, the encryption of the communication is just as secure as a purchased key.

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

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

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

您可以通过自己分发自签名证书来避免这个问题;如果操作正确,连接将非常安全。但这需要更多的工作,并且扩展性差,这就是我们在重要情况下使用 CA 的原因。

Yet, the browser makes the user think he's going to get a virus if he accepts my generated certificate. The browser treats everything like online banking, when sometimes you have other reason for encryption. Ok, enough complaining.

浏览器对此直言不讳是非常正确的;盲目接受不受信任的证书会给人一种错误的安全感;它仅比普通 HTTP 好一点。这很少是正确的做法,而且几乎总是表明存在严重问题。吓跑用户是最好的。

So, ideally, I want one a key I can generate myself (to avoid fees), or maybe one key I purchase

您总是自己生成密钥;我想你是说证书 ;)

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

but I want that key to practically never expire

不会发生。

and I want it to serve multiple installations (at different companies) for my app.

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

I'd like the key to not care about domain names.

同上

I want encrypted communication, but verification that I am who I say I am is not important to me at all.

验证是加密通信不可或缺的一部分;它不是可选的。

How can I deploy an app like this in manner that will avoid browser warnings?

这在 your other question 中得到了回答。