【发布时间】:2015-09-03 09:30:45
【问题描述】:
我有一个 Java 应用程序(部署为 JAR 文件),它允许通过 SLLSockets 共享文件。如果所有用户都使用相同的证书,文件传输是不安全的,因为它违反了非对称加密通信的核心概念。因此,我了解每个用户都需要拥有自己的证书。这就提出了我的第一个问题:
- 如何以编程方式生成证书,以及将其存储在哪里?我不希望用户必须使用 keytool 生成自己的证书,然后必须告诉应用它所在的位置。
现在,假设我的第一个问题得到了解答,并且每个用户都有自己的证书。在打开两台主机之间的 SSL 连接之前,您需要将彼此的证书添加到 trustStore。我知道实现这一点的唯一方法是通过套接字交换它们(请注意,我正在使用 JGroups 交换套接字连接信息)。这引出了我接下来的两个问题:
- 在交换证书时如何保证身份验证和完整性?
- 如何以编程方式将收到的证书添加到 trustStore ?
最后,整篇文章提出了我的第四个问题:
- 上述步骤是使用 SSLSocket 非对称加密通信在两台主机之间安全发送数据的正确方法吗?
【问题讨论】:
-
1.你的威胁模型是什么? (谁,你在保护什么东西)。 2.你确定你需要客户证书吗? 3. 可以使用智能卡吗?
-
1. MIM 试图获取文件 2. 好吧,我认为使用 SSL 是安全传输数据的最佳方式。没有证书我怎么去? 3. 您是指可以通过读卡器读取的实体卡吗?对于这个应用程序来说,这似乎太复杂了。这是一个简单的 LAN 文件共享应用程序,但无论上下文如何,安全都很重要,恕我直言。
-
这是客户端-服务器应用程序还是点对点应用程序?
-
从客户端向服务器发送文件的意义上说,它是一个客户端-服务器应用程序。但是,客户端和服务器只是 JAR 的启动实例,如果这对您有意义的话。我使用为基本通信启用了完整消息加密的 JGroups,但对于文件传输,我需要使用 SSLSockets。
标签: java sockets security ssl encryption-asymmetric