密钥库和信任库之间有什么区别?
密钥库包含私钥,证书及其对应的公钥.
信任库包含您希望与之通信的其他方的证书,或来自您信任的用于标识其他方的证书颁发机构的证书.
密钥库包含私钥.如果您是服务器,或者服务器需要客户端身份验证,则只需要此选项.
信任库包含要信任的CA证书.如果您的服务器证书由认可的CA签名,则JRE附带的默认信任库将已经信任它(因为它已经信任可靠的CA),因此您不需要构建自己的CA,也不需要添加任何内容.来自JRE.
资源
在SSL握手中,trustStore的目的是验证凭证,keyStore的目的是提供凭证.
的keyStore
Java中的keyStore存储与其公钥对应的私钥和证书,如果您是SSL服务器或SSL则需要客户端身份验证.
信任库
TrustStore存储来自第三方的证书,您的Java应用程序通信或由CA签署的证书(证书颁发机构,如Verisign,Thawte,Geotrust或GoDaddy),可用于识别第三方.
的TrustManager
TrustManager确定是否应该信任远程连接,即远程方是否是它声称的对象,并且KeyManager决定在SSL握手期间应将哪些认证凭证发送到远程主机进行身份验证.
如果您是SSL服务器,您将在密钥交换算法期间使用私钥并将与您的公钥对应的证书发送到客户端,此证书是从keyStore获取的.在SSL客户端,如果用Java编写,它将使用存储在trustStore中的证书来验证Server的身份.SSL证书最常见的是.cer文件,它通过使用任何密钥管理实用程序(例如keytool)添加到keyStore或trustStore中.
资料来源:http://javarevisited.blogspot.ch
作为标准JSSE文档的一部分,您可能也对Sun的文章感兴趣:
http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#Stores
通常,信任存储区仅用于存储公钥,以便进行验证,例如使用X.509身份验证.出于可管理性的目的,管理员或开发人员将这两者简单地混合到一个商店中是很常见的.
在Java中,密钥库和信任库之间有什么区别?
以下是Java安全套接字扩展(JSSE)参考指南中 Java文档的描述.我不认为它会告诉你与别人所说的不同.但它确实提供了官方参考.
密钥库/信任
密钥库是密钥材料的数据库.密钥材料用于各种目的,包括身份验证和数据完整性.提供各种类型的密钥库,包括PKCS12和Oracle的JKS.
一般而言,密钥库信息可以分为两类:密钥条目和可信证书条目.密钥条目由实体的标识和私钥组成,可用于各种加密目的.相反,除了实体的标识之外,可信证书条目仅包含公钥.因此,在需要私钥的情况下,不能使用可信证书条目,例如在javax.net.ssl.KeyManager中.在JKS的JDK实现中,密钥库可以包含密钥条目和可信证书条目.
信任库是在决定信任什么时使用的密钥库.如果您从已经信任的实体接收数据,并且您可以验证该实体是它声称的实体,那么您可以假设数据确实来自该实体.
只有在用户信任该实体时,才应将条目添加到信任库.通过生成密钥对或导入证书,用户可以信任该条目.信任库中的任何条目都被视为可信条目.
拥有两个不同的密钥库文件可能很有用:一个只包含您的密钥条目,另一个包含您的可信证书条目,包括CA证书.前者包含私人信息,而后者则不包含.使用两个文件而不是单个密钥库文件可以更清晰地分离您自己的证书(和相应的私钥)与其他证书之间的逻辑区别.要为您的私钥提供更多保护,请将它们存储在具有受限访问权限的密钥库中,并在需要时在可公开访问的密钥库中提供可信证书.