Java SignedObject未正确序列化

时间:2016-02-17 02:45:03

标签: java serialization java-security

似乎java.security.SignedObject没有正确序列化。

当我在一个进程上执行以下操作时,它可以正常工作:

Signature signingEngine = Signature.getInstance("DSA", "SUN");
PublicKey pubKey; // Already initialized appropriately
PrivateKey privKey; // "     "           "
SignedObject so = new SignedObject(myObject, privKey, signingEngine);
so.verify(pubKey, signingEngine); // returns true    

但是,当我有两个进程并尝试通过网络传递签名对象时,我遇到了问题。

发件人

Signature signingEngine = Signature.getInstance("DSA", "SUN");
PrivateKey privKey; // Already initialized appropriately
SignedObject so = new SignedObject(myObject, privKey, signingEngine);
Socket socket = new Socket("localhost", 4000);
ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
out.writeObject(so);
out.close();

接收机

Signature signingEngine = Signature.getInstance("DSA", "SUN");
PublicKey pubKey; // Already initialized appropriately
ServerSocket socket = new ServerSocket(4000);
ObjectInputStream in = new ObjectInputStream(socket.accept().getInputStream());
SignedObject so = (SignedObject) in.readObject();
in.close();
so.verify(pubKey, signingEngine); // returns false    

请注意myObject实现了Serializable,即使我将myObject更改为byte[]这样的原语,我仍然遇到同样的问题。有趣的是,如果我通过套接字将签名对象发送到在同一进程中运行的另一个线程,verify成功。

我认为它可能属于Signature实例,但即使我使用verify的不同实例进行签名和验证,Signature也会在单个进程中成功。

我怀疑密钥存在任何问题,因为在一个进程和发送方/接收方的情况下,我都是以完全相同的方式从文件加载它们。

0 个答案:

没有答案