java - 部署 Java 应用程序时处理安全性

标签 java sockets security ssl encryption-asymmetric

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

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

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

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

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

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

最佳答案

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

能不能不用用户名/密码认证?

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

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

关于java - 部署 Java 应用程序时处理安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30903576/

相关文章:

Swift setsockopt SOL_SOCKET SO_RCVTIMEO 获取无效参数

c# - c# 的角色/权限框架?

google-chrome - SSL、谷歌浏览器和 "non-secure"页面/表单

php - 保护网站的最佳方法和途径

java - 我的代码在使用递归函数时出现异常

c - 在 TCP 服务器的读/写上实现 poll()

java - 如何搭建沙箱环境

python - 尝试实现非阻塞 python tcp 多个端口出现奇怪的异常

java - 如何制作可滚动的 JTable

java - 节点对象 - 为空节点对象分配值