5

我知道每个人都使用 TLS/SSL 作为网络上的传输层安全性。

什么会阻止我手动生成假设密钥对,使用该公钥加密数据客户端(例如使用 JS)并使用 http 的 GET/POST 请求将该数据提交到我的服务器?

我的意思是——我可以使用 JS 库用那个公钥加密一些表单数据——对吧?

只有拥有私钥的人才能解密它——对吧?当然,私钥会保存在服务器上。不会弹出任何关键警告 - 因为传输是常规的 http 请求。那么为什么我需要 TLS?

4

5 回答 5

5

您如何相信传递给浏览器的 Javascript 是使用正确密钥加密的 Javascript?

想一想,并意识到安全最佳实践是非常微妙和微妙的,简单地在上面加上加密并不是解决方案。

此外,如果您正在处理“密钥弹出窗口”,那么您已经通过使用未签名的服务器证书打破了 TLS 信任模型(受信任的证书颁发机构)的一条腿。

于 2012-12-15T03:07:43.283 回答
2

让我们举一个例子来说明这怎么会出错。假设您要加密的是一些表单数据并将其发送到服务器。服务器将其公钥发送给客户端进行加密。JavaScript 中的客户端加密此数据并将其发送到服务器。假设这就是发生的事情,你会没事的。

现在让我们来探讨一下这怎么会出错。如今,在切换状态等情况下,很难在不访问硬件的情况下嗅探其他人的数据包。因此,您试图避免的大多数情况也允许攻击者在中间攻击中出现一个人。在这种情况下,攻击者可以向客户端提供他们喜欢的任何 JavaScript。窃取数据的一种秘密方式是提供 JavaScript,它可以完成原始 JavaScript 所做的所有事情,并且还将未加密的数据发送到另一台服务器。

对于从服务器发送到客户端的数据,这可能以类似的方式发生。

PS 如果您的问题是缺少 CA 签名证书,我建议您从http://www.startssl.com/获取免费证书

于 2012-12-15T03:14:09.193 回答
2

你是对的。您可以这样做,并且您将使用强大的加密技术,这实际上是 SSL/TLS 的底层组件之一。

其中一个问题是,为每条数据计算它的计算成本很高。您还需要在处理加密/解密过程的客户端和服务器上具有交叉兼容的库。

但是,您的 Web 应用程序将失去任何透明度,因为您现在必须对需要保密的每条数据执行此加密过程。

TLS 是面向会话的,所以这不是苹果对苹果的比较。TLS 所做的是设置对客户端和服务器透明的加密会话。它正在制作一个加密管道并允许数据流过它。它还包含“信任”和身份的概念,因此客户可以有一些迹象表明他们正在发送的信息将发送给他们认为的人。

您所描述的是获取数据片段,对其进行加密,然后发送加密版本,并在使用前要求另一端解密。如果您想经历设置的痛苦,您的计划可以并且将会起作用,但是您获得了什么?此外,由于您的方案将没有 TLS 在防止中间人攻击方面所具有的任何东西,因此它在很多方面都容易受到这些问题的影响——从某人将他们自己的库和密钥注入客户端以便您的应用程序启动将数据发送给他们而不是您,或者他们在您和客户端之间传输数据,并向您发送您的服务器认为直接来自他们而不是来自攻击者的数据。

于 2012-12-15T03:34:24.377 回答
1

数字证书包括主题的公钥,由 CA 使用其私钥进行数字签名。您的浏览器包含标识其公钥的证书(在根证书的情况下使用相同的私钥签名),这允许您的浏览器(假设它信任预安装的 CA 证书)验证您的身份。当您访问服务器时,服务器端证书用于将服务器的公钥传输到您的浏览器,然后浏览器使用它来加密凭据的初始交换。当需要客户端证书时,类似的考虑允许服务器识别您。

没有什么可以阻止您在 JS 库中使用您的公钥来加密数据,但是服务器应该如何解密它呢?将您的私钥传递给它会否定私钥的目的,即确保只有您可以解密使用您的公钥加密的信息。所以正确的做法是用你的私钥加密,但是任何拥有你的公钥的人都可以解密它(这种技术通常用于数字签名)。

真的,你应该使用服务器的公钥来加密你的传输,并让它使用它的私钥来解密它。整个安全密钥交换业务非常微妙,有很多公司和个人开发自己的加密系统的例子(从 IBM 往下),依靠算法的隐私。事实证明,它们相对容易破解。最好不要设计自己的系统,直到你有更多的安全经验......

于 2012-12-15T03:21:50.010 回答
0

你的问题没有意义。

如果您生成密钥对并使用公钥加密,则只有您可以解密该消息。所以把它送给别人是徒劳的。您可以使用服务器的公钥进行加密,但是您遇到了安全地确定确切内容的问题。

然后服务器无法将数据加密回给您,除非它使用您的公钥,在这种情况下,它会遇到与您作为客户端已经拥有的身份相同的问题。

TLS/SSL 解决了这些问题,以及您尚未想到的其他一些问题。

于 2012-12-15T23:18:45.333 回答