信任库和密钥库定义

密钥库和信任库之间有什么区别?     
已邀请:
密钥库包含私钥,证书及其对应的公钥。 信任库包含您希望与之通信的其他方的证书,或来自您信任的用于标识其他方的证书颁发机构的证书。     
密钥库包含私钥。如果你是的话,你只需要这个 服务器,或者服务器是否需要客户端身份验证。 信任库包含要信任的CA证书。如果你的服务器 证书由认可的CA(默认信任库)签名 与JRE一起发货的人已经信任它了(因为它已经 信任值得信赖的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文件,它通过使用任何密钥管理实用程序添加到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和   甲骨文的JKS。      一般而言,密钥库信息可以分为两类:密钥条目和可信证书条目。一个关键的条目   由实体的身份和私钥组成,可以使用   用于各种加密目的。相比之下,值得信赖   证书条目除了包含公钥之外只包含公钥   实体的身份。因此,不能使用可信证书条目   需要私钥的地方,例如a   javax.net.ssl.KeyManager。在JKS的JDK实现中,一个密钥库   可以包含密钥条目和可信证书条目。      信任库是在决定信任内容时使用的密钥库。如果您收到来自您的实体的数据   已经信任,如果你可以验证该实体是那个实体   它声称是,那么你可以假设数据真的来自   那个实体。      只有在用户信任该实体时,才应将条目添加到信任库。通过生成密钥对或通过导入   证书,用户信任该条目。任何条目   truststore被视为受信任的条目。      拥有两个不同的密钥库文件可能很有用:一个只包含您的密钥条目,另一个包含您的密钥条目   可信证书条目,包括CA证书。前者   包含私人信息,而后者则不包含。用两个   文件而不是单个密钥库文件提供了更清晰的分离   你自己的证书之间的逻辑区别(和   相应的私钥)和其他人的证书。提供更多   保护您的私钥,将它们存储在密钥库中   限制访问,并提供更多的可信证书   如果需要,可公开访问的密钥库     
TrustStore和keyStore之间的第一个主要区别是TrustManager使用trustStore来确定是否应该信任远程连接,从KeyManager使用keyStore来决定在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
。你也可以 如果需要设置keyStore密码
java.security.UnrecoverableKeyException: Password must not be
null
,使用参数
-Djavax.net.ssl.trustStorePassword=password
-Djavax.net.ssl.trustStorePassword=password
主要来源:   http://javarevisited.blogspot.co.uk/2012/09/difference-between-truststore-vs-keyStore-Java-SSL.html     

要回复问题请先登录注册