java - 不使用证书的加密 RMI 通信

标签 java ssl rsa rmi elgamal

我需要在同一台主机上创建两个 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/

相关文章:

ssl - TLS 1.2 中的不同通信模式

c++ - 使用 openssl libcrypto 使用 RSA 私钥解密数据时 RSA_NO_PADDING 的用法

c# - 加密异常指定的标志无效

java - 可以编译 Maven 文件夹结构之外的文件吗?

java - 如何旋转缓冲图像而不裁剪它?有没有办法旋转 JLayeredPane 或 JLabel?

node.js - 在 express 上使用 nginx 和 ssl 实现的反向代理失败

java - 带有 SSL 的 RMI - 服务器启动时的握手异常(没有共同的密码套件)

Python 模数结果不同于 wolfram alpha?

java - 如何组织我的 Java 7 Eclipse GWT 项目?

java - 如何对以对象作为参数的方法进行单元测试