如何替换 SSL/TLS?

信息安全 tls php javascript
2021-08-28 03:40:51

我必须为非政府组织(非政府组织)建立一个网站,他们从他们的提供商那里得到的选择最少,所以他们不能有 SSL/TLS(几乎只有 HTML/PHP/MySQL/JS)

进出服务器的数据不是很敏感,但我不希望他们的密码、姓名和地址在网络上被清楚地发送。

我考虑过使用 RSA 对调用 API 函数的 JavaScript 中的数据进行加密(我不是专家,但这个库似乎非常有效),但我写了一篇强烈建议不要使用 JavaScript 进行加密的文章(我是法国人和也许我没有把所有事情都做对,但我明白了重点)。

那么我应该使用什么来加密网络上的数据呢?
如果 JS 不是一个坏主意,除了在我的服务器上导入库而不依赖于导入之外,我还能做些什么来确保我可以在此服务器上使用的技术的最大安全性(再次强调,没有 HTTPS)它来自不同的服务器?

4个回答

没有 SSL,没有安全性。现实世界中的事情很少是简单的,但事实就是如此。这很容易看出如下:无论您在 Javascript 中做什么,都将在服务器发送的Javascript 中完成。任何能够查看数据的攻击者也可以随意修改它(例如,监视 WiFi 的最简单方法是运行您自己的假接入点,然后您自然可以随时修改所有数据) ; 因此,这样的攻击者可以简单地删除或更改您可能提出的任何基于 Javascript 的解决方案,然后将其停用。或者只是添加一个钩子以密码作为额外参数以明文形式发送。

现在,即使您可以在客户端浏览器上获得“安全的 Javascript”,您也会遇到 Javascript 加密带来的所有问题,这些问题在您链接到的文章中有详细说明。但这只是次要考虑,与上面解释的根本缺陷相比:没有 SSL,您无法确保在客户端浏览器上运行的是您的代码。

尝试在非 SSL 网站上安全地处理密码类似于尝试仅使用茶匙和生锈的撬棍安全地进行脑部手术。只是不要这样做。如果有流向网站的敏感数据(例如姓名和地址),那么您必须应用合理的保护机制。如果数据不敏感,那么为什么需要密码?

恕我直言,随机数生成器是您最不必担心的问题。由于调用 enceyption 的代码是明文发送的,因此对某人来说 MITM 交互是微不足道的。

如果服务需要加密提供的安全级别并且由网站提供,那么它必须使用 HTTPS(理想情况下,所有相关的安全内容,如安全+httponly cookie 和 HSTS)。

解决这个问题的唯一方法是编写一个 HTML5 应用程序(不经常下载代码)——但即使这样也有很大的缺点。

如前所述,最好的解决方案是获得一个允许 https 的真正的网络托管计划。这不应该太贵,事实上甚至应该可以找到免费的提供商来提供这个。

如果做不到这一点,你的用例是什么?听起来您为您的网站设置了一组用户。如果是这种情况,并且您不只是向 Internet 上的随机人员提供基于订阅的事件通知服务,请考虑为不同频道上的“安全”连接提供基础。

我突然想到,通过另一个可靠的来源(通过蜗牛邮件发布 CD 并通过电子邮件通知他们,只需将软件作为数字签名电子邮件的附件发送等)将代码发送到他们的机器上,您就可以预先- 使用加密公钥加载软件。

然后,您可以通过不安全的连接方法(例如 http)协商安全连接,因为确定服务器是否已令人满意地解密使用其公钥加密的详细信息的代码存在于客户端上。结果是“纯文本”http 应用程序数据流,其中应用程序数据本身是加密的。

这是一个很麻烦且不标准的方法。您会遇到实施问题,因为很少有人会尝试提供建议,而安全性则是因为很少有人审查过它的可靠性*。

替代通道本身可能存在安全问题。邮件会被截获吗?诈骗者会冒充您的组织并发送他们自己的“安全”版本的软件吗?您的用户是否足够精通检查您发送的电子邮件上的数字签名?这些都是您需要考虑的问题,要么接受风险,要么尝试使用新颖的解决方案来减轻风险,因为您不仅对如何实施,甚至对您需要问的问题(您需要问不止这三个!)。

在与非政府组织管理层交谈时,请考虑用以下术语概述情况:

  1. 后一种方法涉及重大风险,并且最终会花费更多的时间来实施,而不是简单地支付托管费用 - 程序需要更新,特别是如果服务器(或服务器密钥对)发生变化,并不断分发到新的初始部署后的用户。
  2. 如果有任何信息泄露(并且会泄露),那么在 http 上使用地址和姓名(以及可能的电子邮件地址)的密码什么都不做,可能会成为一场公关灾难,这是一个重大风险。人们重复使用密码以及您的不良做法可能与随后的违规行为有关,这使情况更加复杂。
  3. 因此,您已经对这种情况进行了重要的思考,并且不会仅仅因为“每个人都这样做”而建议第 4 步中概述的解决方案(尽管,在每个人都这样做的情况下,因为这是最佳实践,这并不是一件坏事)。能够提出步骤 1 和 2 中概述的替代(如果复杂和过度)解决方案是进行尽职调查的证据。
  4. 基于此,持续成本低(或无)的 https 托管既是成本最低又风险最小的方法。

*Jonathan Gray在他的回答中解释了为什么您会遇到编码安全系统的问题,请查看“TLS 也是一个更加内在的系统”开头的部分

首先更换您的主机。

多亏了免费的 CA,获得 SSL 证书比以往任何时候都容易。例如, LetsEncrypt以自动方式提供免费的 SSL/TLS 域验证证书,前提是您拥有域名。StackzOfZtuff 对其功能的回答中有更多解释

有关于如何在他们的社区网站上通过常见问题解答和帮助论坛进行设置的说明。