Dar*_*ron 261
密钥库包含私钥,证书及其对应的公钥.
信任库包含您希望与之通信的其他方的证书,或来自您信任的用于标识其他方的证书颁发机构的证书.
Ani*_*kur 70
在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
Pet*_*ien 29
作为标准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证书.前者包含私人信息,而后者则不包含.使用两个文件而不是单个密钥库文件可以更清晰地分离您自己的证书(和相应的私钥)与其他证书之间的逻辑区别.要为您的私钥提供更多保护,请将它们存储在具有受限访问权限的密钥库中,并在需要时在可公开访问的密钥库中提供可信证书.
trustStore 和 keyStore 之间的第一个也是主要区别是 trustStore 由 TrustManager 使用来确定远程连接是否应该受信任,keyStore 由 KeyManager 使用来决定在 SSL 握手期间应将哪些身份验证凭据发送到远程主机进行身份验证。
另一个区别是 keyStore 理论上包含仅当您在 SSL 连接中运行服务器或在服务器端启用了客户端身份验证时才需要的私钥,而另一方面 trustStore 存储来自 CA(证书颁发机构)的公钥或证书,用于信任远程方或 SSL 连接。
事实上,您可以将私钥和公钥存储在同一个文件中,因为管理这些文件的工具是相同的(keytool),因此您可以使用单个文件来实现这两个目的,但您可能不应该这样做。
至少在我的 Mac OSX 上,默认的 keyStore 是${user.home}/.keystore
,默认的 trustStore 是/System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts
。
如果您想覆盖它们,您应该添加 JVM 参数
-Djavax.net.ssl.keyStore /path/to/keyStore
或
-Djavax.net.ssl.trustStore /path/to/trustStore
. java.security.UnrecoverableKeyException: Password must not be
null
在 的情况下,您可能还需要使用参数
-Djavax.net.ssl.trustStorePassword=password
或设置 keyStore 密码
-Djavax.net.ssl.trustStorePassword=password
主要来源:
http://javarevisited.blogspot.co.uk/2012/09/difference- Between-truststore-vs-keyStore-Java-SSL.html