我工作的一个客户机/服务器应用程序。客户端和服务器通过NIO连接和连接受SSL保护。我根据我的this GitHub Project架构。
眼下密钥库和信任(客户端和服务器),存储为资源,以我的项目,在连接过程中需要的时候加载。
这是一个安全的解决方案?
如果我是发布将意味着客户端和服务器的每个副本将使用相同的密钥库和信任的应用程序。这将会使事情变得非常简单。但是,它安全吗?
替代的解决方案是让最终用户管理他们自己的证书,这似乎过于复杂。
编辑:
澄清:客户端和服务器相互认证。他们每个人都有自己的私钥。
这是确定的,你执行ECDHE或DHE(perfect forward secrecy)使用相同的密钥对所有客户端,只要。在这种情况下,关键是只用来证明客户身份,而新的,短暂的密钥用于通讯。否则,客户能够嗅出和解密每个人流量。
当然,对所有客户端一个键意味着,如果一个客户端的密钥被泄露,你需要发出一个新的密钥,并分发到所有客户端。
使用服务器和客户端相同的密钥意味着客户将能够冒充服务器。在使用TLS大多数情况下,这通常是不可取的。它才有意义,当你完全控制服务器和客户端。
如果你要使用相同的证书对客户端和服务器,你基本上没有真正从非对称加密技术中获益。您的系统可能会更简单,如果你只使用对称密钥,就像TLS-PSK。