【问题标题】:Handling security when deploying Java application部署 Java 应用程序时处理安全性
【发布时间】:2015-09-03 09:30:45
【问题描述】:

我有一个 Java 应用程序(部署为 JAR 文件),它允许通过 SLLSockets 共享文件。如果所有用户都使用相同的证书,文件传输是不安全的,因为它违反了非对称加密通信的核心概念。因此,我了解每个用户都需要拥有自己的证书。这就提出了我的第一个问题:

  1. 如何以编程方式生成证书,以及将其存储在哪里?我不希望用户必须使用 keytool 生成自己的证书,然后必须告诉应用它所在的位置。

现在,假设我的第一个问题得到了解答,并且每个用户都有自己的证书。在打开两台主机之间的 SSL 连接之前,您需要将彼此的证书添加到 trustStore。我知道实现这一点的唯一方法是通过套接字交换它们(请注意,我正在使用 JGroups 交换套接字连接信息)。这引出了我接下来的两个问题:

  1. 在交换证书时如何保证身份验证和完整性?
  2. 如何以编程方式将收到的证书添加到 trustStore ?

最后,整篇文章提出了我的第四个问题:

  1. 上述步骤是使用 SSLSocket 非对称加密通信在两台主机之间安全发送数据的正确方法吗?

【问题讨论】:

  • 1.你的威胁模型是什么? (谁,你在保护什么东西)。 2.你确定你需要客户证书吗? 3. 可以使用智能卡吗?
  • 1. MIM 试图获取文件 2. 好吧,我认为使用 SSL 是安全传输数据的最佳方式。没有证书我怎么去? 3. 您是指可以通过读卡器读取的实体卡吗?对于这个应用程序来说,这似乎太复杂了。这是一个简单的 LAN 文件共享应用程序,但无论上下文如何,安全都很重要,恕我直言。
  • 这是客户端-服务器应用程序还是点对点应用程序?
  • 从客户端向服务器发送文件的意义上说,它是一个客户端-服务器应用程序。但是,客户端和服务器只是 JAR 的启动实例,如果这对您有意义的话。我使用为基本通信启用了完整消息加密的 JGroups,但对于文件传输,我需要使用 SSLSockets。

标签: java sockets security ssl encryption-asymmetric


【解决方案1】:

您不一定需要客户端证书。

您不能使用用户名/密码验证吗?

您仍然可以通过使用服务器证书来保护传输。

客户端证书也有点麻烦,而且并不完全安全。它们把你绑在一台机器上,邪恶的进程可以读取它们。智能卡可以缓解这种情况,但不是免费的。

【讨论】:

  • 用户名/密码我认为会有点痛苦。这意味着作为 LAN 上的快速文件共享应用程序。虽然威胁不是什么大不了的事,但我想防止 MITM 监听文件传输以及伪装成其他人。智能卡绝对不是一种选择,因为这是一个开源且免费的项目。 DES 加密文件传输,加上预传输 Diffie-Hellman 身份验证,只需在每个用户的屏幕上显示一个短代码,他们都应该确保代码相同?怎么样一些phone-pc同步技术。
猜你喜欢
  • 1970-01-01
  • 2013-03-20
  • 2019-02-04
  • 2017-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-13
  • 1970-01-01
相关资源
最近更新 更多