我有一个要保护的使用Kryonet的可运行游戏服务器+客户端系统。我已经阅读了很多有关Kryo和Kryo​​net的源代码,也了解了有关java.nio(SocketChannels和SSL)的一些信息。我对使用Java进行加密有足够的了解,但是我不确定使用SSL进行Kryonet和SocketChannel时是否理解所有概念。

您可以使用河豚对在Kryonet中发送的对象进行加密,但是我看不出这是安全的吗?我的意思是,所有客户端都必须使用相同的对称密钥,因为您不必分别加密客户端连接,而是要在服务器上进行序列化,因此所有客户端都需要相同的密码,而不再是该密码了吗?

然后,我查看了将Kryonet源更改为使用SSLSockets的方法,但是我看到Kryonet使用非阻塞IO,从我使用SSLSocket而不是Socket读取的内容中,使用SocketChannels不好吗?这是我真的很茫然的地方,不确定是否值得付出努力,所以我希望对Kryonet和SocketChannels有更深入了解的人能对我有所帮助。确保Kryonet的安全似乎似乎是不可能的,但是我真的不想在我的项目中切换到这一点,因此非常欢迎任何建议!

最佳答案

没错,即使您解决了密钥分发问题,仅加密也不是安全的,除非Kryonet从对等身份验证开始也做SSL所做的所有事情。

Java中没有SSLSocketChannel。您必须用SocketChannel和亲爱的旧版SSLEngine自己完成所有艰苦的yakka,实际上需要博士学位。正确驾驶。

请参阅jsse标记(临时),以获取我撰写的许多有关SSLEngine的帖子,在此不再赘述。

10-06 14:04