我正在处理客户端/服务器应用程序。客户端和服务器通过NIO连接,并通过SSL保护连接。我的架构基于this GitHub Project。
现在,KeyStore和TrustStore(用于客户端和服务器)作为资源存储到我的项目中,并在连接过程中需要时加载。
这是安全的解决方案吗?
如果要发布该应用程序,则意味着客户端和服务器的每个副本都将使用相同的KeyStore和TrustStore。这将使事情变得非常简单。但是安全吗?
另一种解决方案是让最终用户自己管理其证书,这似乎过于复杂。
编辑:
说明:客户端和服务器正在相互认证。它们每个都有自己的私钥。
最佳答案
只要强制执行ECDHE或DHE(perfect forward secrecy),就可以对所有客户端使用相同的密钥。在那种情况下,密钥仅用于证明客户端的身份,而新的临时密钥用于通信。否则,客户端可以嗅探和解密彼此的流量。
当然,对于所有客户而言,一个密钥意味着如果一个客户的密钥被泄露,则您需要发布一个新密钥并分发给所有客户。