我正在处理客户端/服务器应用程序。客户端和服务器通过NIO连接,并通过SSL保护连接。我的架构基于this GitHub Project

现在,KeyStore和TrustStore(用于客户端和服务器)作为资源存储到我的项目中,并在连接过程中需要时加载。

这是安全的解决方案吗?

如果要发布该应用程序,则意味着客户端和服务器的每个副本都将使用相同的KeyStore和TrustStore。这将使事情变得非常简单。但是安全吗?

另一种解决方案是让最终用户自己管理其证书,这似乎过于复杂。

编辑:

说明:客户端和服务器正在相互认证。它们每个都有自己的私钥。

最佳答案

只要强制执行ECDHE或DHE(perfect forward secrecy),就可以对所有客户端使用相同的密钥。在那种情况下,密钥仅用于证明客户端的身份,而新的临时密钥用于通信。否则,客户端可以嗅探和解密彼此的流量。

当然,对于所有客户而言,一个密钥意味着如果一个客户的密钥被泄露,则您需要发布一个新密钥并分发给所有客户。

10-06 14:12
查看更多