为什么需要TLS / SSL?

时间:2012-12-15 03:01:50

标签: php openssl ssl

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

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

我的意思是 - 我可以使用JS库使用该公钥加密某些表单数据 - 对吧?

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

5 个答案:

答案 0 :(得分:5)

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

暂时考虑一下,并意识到安全性最佳实践非常微妙且细致入微,简单地将加密打顶并不是解决方案。

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

答案 1 :(得分:2)

让我们举一个如何出错的例子。假设您尝试加密的是一些表单数据并将其发送到服务器。服务器将其公钥发送给客户端进行加密。 JavaScript中的客户端会加密此数据并将其发送到服务器。假设发生的事情你就没事了。

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

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

P.S。如果您的问题是缺少CA签名证书,我建议您从http://www.startssl.com/

获取免费证书

答案 2 :(得分:2)

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

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

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

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

您所描述的是使用数据,加密数据,然后发送加密版本,并在使用前要求另一方解密。如果您想要完成设置的痛苦,您的方案可以而且将会有效,但您获得了什么?此外,由于您的方案不具备TLS在防止中间人攻击方面的作用,因此它可以通过多种方式容易受到这些问题的影响 - 从有人注入自己的库和密钥到客户端以便您的应用程序启动向他们而不是您发送数据,或者他们在您和客户之间发送数据,并向您发送服务器认为直接来自他们的数据,而不是来自攻击者。

答案 3 :(得分:1)

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

没有什么可以阻止你在JS库中使用你的公钥来加密数据,但服务器应该如何解密呢?传递它的私钥会使私钥的目的无效,这是为了确保只有您可以解密使用您的公钥加密的信息。因此,正确的方法是使用您的私钥加密,但是那个拥有您的公钥的人可以解密它(这种技术通常用于数字签名)。

实际上你应该使用服务器的公钥来加密你的传输,并让它使用它的私钥来解密它。安全密钥交换的整个业务非常微妙,并且有许多公司和人们开发自己的加密系统的例子(从IBM向下),依赖于算法的隐私。事实证明它们相对容易打破。在您获得更多安全体验之前,最好不要设计自己的系统......

答案 4 :(得分:0)

你的问题毫无意义。

如果您生成密钥对并使用公钥加密,则只有您可以解密该邮件。因此将其发送给其他人是徒劳的。您可以使用服务器的公钥进行加密,但是您确实存在确切安全确定内容的问题。

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

TLS / SSL解决了这些问题,还有一些你尚未想到的问题。