使用相同的密钥库进行信任存储和服务器存储时的安全问题?

时间:2011-09-12 12:28:59

标签: java security keystore

对信任存储(用于验证客户端的证书)和服务器存储(服务器使用的私钥)使用相同的密钥库时是否存在安全问题?我问这个是因为我知道建议有两个单独的文件(我想知道为什么会这样)。

2 个答案:

答案 0 :(得分:0)

  

我知道建议有两个单独的文件(对于信任存储和服务器存储)

此类建议的原因是您通常只在信任库中存储公钥和受信任CA的相关证书,而密钥库用于存储私钥和关联的公钥(以及相关证书)

当您开始将两者都作为单个文件进行管理时,任何了解信任库密码的代理(用户甚至应用程序代码)都可以读取和修改密钥库的私钥。这不是你想要的,因为私钥应该是私有的,并且只有一个实体(拥有密钥的实体)知道。

同样,代理也可以通过知道密钥库密码来修改信任库,以将证书添加到信任库。就它而言,这可能看起来是良性的,但通常多个客户端可以使用相同的信任库(如JRE的cacerts文件),从而导致一个代理可能中毒信任关系的情况(通过添加证书客户端和服务器之间的恶意CA进入信任库。

实际上,除非你的代理人不值得信任(在这种情况下你应该采用其他几种做法),否则这项建议更多是一种纵深防御的做法。

答案 1 :(得分:0)

有一个安全问题,但我认为推荐的大部分原因是责任的合理分离。来自Keystores and Truststores

  

使用两个不同的文件而不是单个密钥库文件可以更清晰地分离您自己的证书(和相应的私钥)与其他证书之间的逻辑区别。如果将私钥存储在具有受限访问权限的密钥库中,则可以为私钥提供更多保护,同时在需要时可在更公开的密钥库中提供受信任证书。

这里的关键安全点是,通过将可信(公共)证书与您自己的包含私钥的证书分开,您可以使用您认为必要的任何级别的限制来保护您自己的私钥,同时保持可信证书的公开