我正在处理客户端/服务器应用程序。客户端和服务器通过NIO连接,并通过SSL保护连接。我的架构基于this GitHub Project。
现在,KeyStore和TrustStore(用于客户端和服务器)作为资源存储到我的项目中,并在连接过程中需要时加载。
这是一个安全的解决方案吗?
如果我要发布应用程序,那将意味着客户端和服务器的每个副本都将使用相同的KeyStore和TrustStore。这将使事情变得非常简单。但是安全吗?
另一种解决方案是让最终用户自己管理证书,这似乎过于复杂。
编辑:
说明:客户端和服务器正在相互认证。他们每个人都有自己的私钥。
答案 0 :(得分:1)
为服务器和客户端使用相同的密钥意味着客户端将可以模拟服务器。在大多数使用TLS的情况下,这通常是不希望的。只有完全控制服务器端和客户端,这才有意义。
如果您要对客户端和服务器使用相同的证书,那么从本质上讲,非对称加密实际上并没有使您受益。如果仅使用对称密钥(例如TLS-PSK),则系统可能会简单得多。
答案 1 :(得分:1)
只要您强制执行ECDHE或DHE(perfect forward secrecy),就可以对所有客户端使用相同的密钥。在那种情况下,密钥仅用于证明客户端的身份,而新的临时密钥用于通信。否则,客户端将能够嗅探并解密彼此的流量。
当然,所有客户的一把钥匙意味着如果客户的钥匙被盗用,则需要发布新的钥匙并分发给所有客户。