使用相同的 SSL Key/TrustStore 分发客户端/服务器应用程序是否安全?

Is it secure to distribute a client / server application with same SSL Key/TrustStore?

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

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

这是一个安全的解决方案吗?

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

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

编辑:

澄清:客户端和服务器相互验证。他们每个人都有自己的私钥。

对服务器和客户端使用相同的密钥意味着客户端将能够模拟服务器。在大多数使用 TLS 的情况下,这通常是不可取的。只有当您完全控制服务器端和客户端时才有意义。

如果您要为客户端和服务器使用相同的证书,那么您实际上并没有真正从非对称加密中获益。如果您只使用对称密钥,例如 TLS-PSK,您的系统可能会简单得多。

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

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