我有一个允许通过 SLLSockets 共享文件的 Java 应用程序(部署为 JAR 文件)。如果所有用户都使用同一个证书,文件传输就不安全,因为它违反了非对称加密通信的核心概念。因此,我明白每个用户都需要有自己的证书。这提出了我的第一个问题:
- 如何以编程方式生成证书,将其存储在哪里?我不希望用户必须使用 keytool 生成他们自己的证书,然后必须告诉应用程序它所在的位置。
现在,假设我的第一个问题得到了回答,每个用户都有自己的证书。在打开两个主机之间的 SSL 连接之前,需要将彼此的证书添加到 trustStore。我知道实现此目的的唯一方法是通过套接字交换它们(请注意,我正在使用 JGroups 交换套接字连接信息)。这引出了我接下来的两个问题:
- 交换证书时如何保证身份验证和完整性?
- 如何以编程方式将收到的证书添加到 trustStore 中?
最后,整篇文章提出了我的第四个问题:
- 上述步骤是否是使用 SSLSocket 非对称加密通信在两台主机之间安全发送数据的正确方法?
最佳答案
您不一定需要客户端证书。
能不能不用用户名/密码认证?
您仍然可以仅通过使用服务器证书来保护传输。
客户端证书也有点麻烦,而且不完全安全。它们将你绑在一台机器上,邪恶的进程可以读取它们。智能卡可以缓解这种情况,但不是免费的。
关于java - 部署 Java 应用程序时处理安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30903576/