我们有一个要求,要求我们对应用程序中某些关键功能的参数进行签名。方法调用是用 RMI 完成的。我的第一个想法是为参数构建一个包装类并使用 SignedObject 对其进行签名。但这会导致许多包装器对象。
有人对如何以更一般的方式完成此任务有任何想法吗?可能会覆盖 RMI 中的发送和接收功能以及广告签名和验证?
我们有一个要求,要求我们对应用程序中某些关键功能的参数进行签名。方法调用是用 RMI 完成的。我的第一个想法是为参数构建一个包装类并使用 SignedObject 对其进行签名。但这会导致许多包装器对象。
有人对如何以更一般的方式完成此任务有任何想法吗?可能会覆盖 RMI 中的发送和接收功能以及广告签名和验证?
您可以通过 SSL 运行 RMI。Sun 有几个 JSR 来执行此操作,但被专家委员会投票否决。所以现在你必须选择一种非标准的方式,我相信大多数应用服务器都会这样做。
当然有几种方法可以做到这一点。一个确实是对数据流进行签名。另一种是对编码为字节数组的参数对象实例和基本类型进行签名。两者都要求您在某个时候连接到 RMI。
可能更好的是把 RMI 服务放在 SOAP 服务后面,例如这里描述的。然后,您可以创建一个 Web 服务。一旦你有了一个网络服务,你就可以部署WS-Security。在这种情况下,您可以依靠预定义和研究的消息格式来确保传输层安全。
对调用该方法的用户进行身份验证并授予他相关权限还不够吗?通过这种方式,您可以传递您想要的任何参数,并且您只需验证一次。您应该能够假设,如果他们可以模拟用户,他们也可以使用代码对参数进行签名。
除非他们从其他地方(最初可能来自您?)获取参数,在这种情况下,如果参数是字符串,则创建参数值的任何人都可以使用他们的私钥加密它们,您可以使用公钥解密,这意味着它们是那些真正唱出参数值的人。使用签名包装器包装所有参数可能会产生很高的开销。