我需要在同一台主机上创建两个 java 进程以安全地通信。我不需要对流程进行身份验证,所以我不想使用证书。
我想在服务端和客户端生成一个随 secret 钥,使用Elgamal在进程之间交换 key ;跨进程建立公共(public)对称 key ;然后进行安全通信。
据我所知,这可以通过实现 RMIServerSocketFactory 和 RMIClientSocketFactory 接口(interface)来建立对称 key 来完成,如上所述。
是否已经有一个实现可以做到这一点?
或者有没有办法配置 SslRMIServerSocketFactory 和 SslRMIClientSocketFactory 开始使用 ElGamal 作为 key 交换协议(protocol)
ElGamal 优于 RSA,因为 ElGamal 将为每次握手生成随机对称 key ,而 RSA 每次都会生成静态 key 。
最佳答案
I need to make two java proceses on the same host to communicate securely. I do not need to authenticate the processes so I don't want to use certificates.
不幸的是,您的推理从一开始就有缺陷。无论通信 channel 多么“坚固”,如果您想 secret 交换数据,您总是希望确保您正在与预期的一方进行通信。为此,必须以一种或另一种形式进行身份验证。
理论上,您可以取消证书并使用 PSK 密码套件(这将有效地包括身份验证步骤)。默认情况下,Oracle/OpenJDK JRE 不支持此功能。此外,如果您假设您的证书的私钥会被泄露(如您的 other question 所建议的那样),那么同样的问题也可能会发生在预共享 key 上。
关于java - 不使用证书的加密 RMI 通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12777670/