0

场景:敏感信息交换(1)从客户端到服务器(2)从服务器到客户端

问题:交换的数据没有加密,所以嗅探很容易(理论上总是可能的,对吧?)

解决方案:加密在任一方向(服务器到客户端和客户端到服务器)传输的所有数据。

实施

(1) 客户端到服务器 - 生成证书,在服务器上安装私钥并配置 Tomcat 以在 HTTPS 上工作(网上有很多教程)。

(2) 服务器到客户端 - 私钥转到客户端(或由客户端生成),但似乎有些教程强烈强调每个客户端都应该拥有自己的证书以进行身份​​验证。

问题:如果我已经通过数据库用户名/密码(用盐散列)组合验证我的用户,但我仍然需要加密服务器到客户端的数据传输以减少嗅探的机会,我可以只为所有人生成一个私钥吗?客户?还有其他方法可以使用 Tomcat/Spring 实现我所需要的吗?

4

1 回答 1

1

看来您正在混淆一些东西:

常规https包括双向加密,服务器端只有一个私钥+证书。一旦客户端通过 https 请求资源,他们就会得到加密的答案。因此,您只需要强制执行 https 连接(例如,将某些请求重定向到 https,而不通过 h​​ttp 传递数据)

如果您需要客户端证书,这些证书纯粹用于客户端身份验证,因此与所有可能的客户端共享一个公共客户端密钥/证书将破坏此目的。拥有客户端密钥/证书不会为您的数据传输添加更多加密。

在评论中回答您的后续问题:

对于 https,服务器保留其私钥,公钥是与客户端共享的。在典型的 https 上,客户端可以合理地确定服务器是谁(身份验证,通过服务器公钥上的可信签名完成。这就是您支付信任中心的费用)但是,服务器不知道客户端是谁(这里是客户端证书将发挥作用,但纯粹用于身份验证,而不是用于加密)

服务器和客户端协商一个公共会话密钥。为此目的,密钥交换协议有许多不同的实现。这个论坛可能不是再次描述会话协商和 ssl 握手的正确位置,但您可以确定您只需要一个服务器端密钥即可达到上述目的:以任何网站为例:如果你去 google邮件,他们的 https 加密通过他们拥有私钥和经过认证(签名)的公钥来工作:您没有客户端认证,但通过与他们的加密连接提供您的用户名和密码。否则,您必须为许多服务安装客户端密钥/证书——这对普通互联网用户来说负担太大。

希望有帮助。

于 2013-07-25T15:49:44.720 回答