Java 对信任存储和服务器存储使用相同的密钥库时出现安全问题?

Java 对信任存储和服务器存储使用相同的密钥库时出现安全问题?,java,security,keystore,Java,Security,Keystore,对信任存储(用于验证客户端的证书)和服务器存储(服务器使用的私钥)使用相同的密钥库时是否存在安全问题?我这样问是因为我知道有人建议使用两个单独的文件(我想知道为什么会这样) 我知道有人建议使用两个单独的文件(用于信任存储和服务器存储) 建议这样做的原因是,您通常只在信任库中存储受信任CA的公钥和相关证书,而密钥库用于存储私钥和相关公钥(以及相关证书) 当您开始将两者作为单个文件进行管理时,任何了解信任库密码的代理(用户甚至应用程序代码)都有可能读取和修改密钥库的私钥。这不是您想要的,因为私钥本质

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

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

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

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

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

事实上,该建议更多的是一种深度防御实践,除非你的代理不值得信任(在这种情况下,你应该采用其他几种实践)

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

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

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

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


实际上,该建议更多的是一种深入防御实践,除非您的代理不可信(在这种情况下,您应该采用其他几种实践)。

有一个安全问题,但我认为该建议的大部分原因是责任的逻辑分离。发件人:

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


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

有一个安全问题,但我认为这项建议的大部分原因是责任的逻辑分离。发件人:

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

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