实际上,我从我的前同事那里得到了一些项目。这些是基于 App-Server TCP 套接字的应用程序。我注意到一些身份验证/登录交互正在使用 RSA/AES 加密/解密
据我所知,如果我们在传输层采用 TLS 套接字,我们之间的数据就会被加密。
所以..如果我们使用 TLS,我们还需要在应用层代码中加密/解密数据吗?或者这只是多余的努力。
实际上,我从我的前同事那里得到了一些项目。这些是基于 App-Server TCP 套接字的应用程序。我注意到一些身份验证/登录交互正在使用 RSA/AES 加密/解密
据我所知,如果我们在传输层采用 TLS 套接字,我们之间的数据就会被加密。
所以..如果我们使用 TLS,我们还需要在应用层代码中加密/解密数据吗?或者这只是多余的努力。
是和否。
加密不是“拥有它”或“没有它”之类的命题。加密的概念只有在上下文中才有意义。
作为一个应该更清楚地证明失败的示例:假设您有一个需要保持安全的文档。您将其上传到您的 Dropbox 帐户。现在,它是加密的吗?
是的,它在传输过程中被加密。Dropbox 使用 HTTPS,因此在上传(和任何下载)期间使用 TLS 加密。然后在传输后在另一侧对其进行解密。
是的,它在存储中是加密的(据我们所知)。Dropbox 表示,他们使用特定于您帐户的密钥对服务器上的所有数据进行加密。然后根据需要为您透明地解密。
但是不,文档没有以对您来说很重要的方式加密。Dropbox 将文件同步到您的所有计算机,并将纯文本副本存储在您的计算机上。因此,如果有人查看您的计算机,他们可以阅读文档而无需绕过任何加密。
加密数据时,您必须弄清楚您要保护的内容以及要保护的对象。您需要了解您试图通过加密来防止什么。一旦您了解了您要完成的工作,您所拥有的加密是否对您有任何好处都应该立即显而易见。
从深度防御的角度来看,实施应用层加密可能很有用,具体取决于数据的分类。
想象以下示例:您是一家银行,您使用 REST API 来检索特定银行账户的余额信息。API URL 是:
此示例中的银行帐号为 12345678。尽管您的通信渠道已加密,但该银行帐号仍可以在本地缓存并显示在 Web 服务器日志文件中。
这可能是进行应用层加密以避免记录敏感信息的一个很好的理由。
首先,SSL 既不是网络层协议,也不是应用层协议。它是“位于”两层之间的一层。
其次,由于其地位,SSL 使客户端机器能够有选择地对单个应用程序应用安全保护,而不是对整个应用程序组进行加密。
该过程可以在不涉及网络层的情况下完成。由于这些原因,当 SSL 用于加密网络流量时,实际上只有应用层数据被加密。
因此,您所需要的只是带有客户端身份验证的 HTTPS/SSL。添加第二层加密实际上并没有增加任何安全性。