信任库和密钥库定义

时间:2008-11-25 18:38:23

标签: keystore encryption-asymmetric truststore

密钥库和信任库之间有什么区别?

7 个答案:

答案 0 :(得分:252)

密钥库包含私钥,证书及其对应的公钥。

信任库包含您希望与之通信的其他方的证书,或来自您信任的用于识别其他方的证书颁发机构的证书。

答案 1 :(得分:76)

  1. 密钥库包含私钥。如果你是的话,你只需要这个 服务器,或者服务器是否需要客户端身份验证。

  2. 信任库包含要信任的CA证书。如果你的服务器 证书由认可的CA(默认信任库)签名 与JRE一起发货的人已经信任它了(因为它已经 信任值得信赖的CA),所以你不需要建立自己的, 或者从JRE中添加任何内容。

  3. Source

答案 2 :(得分:69)

在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

答案 3 :(得分:29)

作为标准JSSE文档的一部分,您可能也对Sun的文章感兴趣:

http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#Stores

通常,信任存储区仅用于存储公钥,以便进行验证,例如使用X.509身份验证。出于可管理性的目的,管理员或开发人员将这两者简单地合并到一个商店中是很常见的。

答案 4 :(得分:9)

  

在Java中,密钥库和信任库之间的区别是什么?

以下是Java Secure Socket Extension (JSSE) Reference Guide的Java文档中的说明。我不认为它会告诉你与别人所说的不同。但它确实提供了官方参考。

  

<强>密钥库/信任

     

密钥库是密钥材料的数据库。密钥材料用于各种目的,包括身份验证和数据完整性。   提供各种类型的密钥库,包括PKCS12和   甲骨文的JKS。

     

一般来说,密钥库信息可以分为两类:密钥条目和可信证书条目。一个关键的条目   由实体的身份和私钥组成,可以使用   用于各种加密目的。相比之下,值得信赖   证书条目除了包含公钥之外只包含公钥   实体的身份。因此,不能使用可信证书条目   需要私钥的地方,例如a   javax.net.ssl.KeyManager。在JKS的JDK实现中,一个密钥库   可能包含密钥条目和可信证书条目。

     

信任库是在决定信任什么时使用的密钥库。如果您收到来自您的实体的数据   已经信任,如果你可以验证该实体是那个实体   它声称是,那么你可以假设数据真的来自   那个实体。

     

如果用户信任该实体,则只应将条目添加到信任库。通过生成密钥对或通过导入   证书,用户信任该条目。任何条目   truststore被视为可信条目。

     

拥有两个不同的密钥库文件可能很有用:一个只包含您的密钥条目,另一个包含您的密钥条目   可信证书条目,包括CA证书。前者   包含私人信息,而后者则不包含。用两个   文件而不是单个密钥库文件提供了更清晰的分离   你自己的证书之间的逻辑区别(和   相应的私钥)和其他人#39;证书。提供更多   保护您的私钥,将它们存储在密钥库中   限制访问,并提供更多的可信证书   如果需要,可公开访问的密钥库。

答案 5 :(得分:3)

  1. trustStore和keyStore之间的第一个主要区别是TrustManager使用trustStore来确定是否应该信任远程连接,KeyManager使用KeyStore来决定在SSL期间应该将哪些身份验证凭据发送到远程主机进行身份验证握手。

  2. 另一个区别是keyStore理论上只包含在SSL连接中运行服务器或在服务器端启用了客户端身份验证所需的私钥,另一方面,trustStore存储来自CA的公钥或证书(证书)用户信任用于信任远程方或SSL连接。

    实际上,您可以在同一文件中存储私钥和公​​钥, 鉴于管理这些文件的工具是相同的(keytool), 所以你可以使用单个文件用于这两个目的,但是你 可能不应该

  3. 至少在我的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

  4. 主要来源:

      

    http://javarevisited.blogspot.co.uk/2012/09/difference-between-truststore-vs-keyStore-Java-SSL.html

答案 6 :(得分:0)

密钥库用于存储特定程序应提供给双方(服务器或客户端)进行验证的私钥和身份证书。

Truststore用于存储来自认证机构(CA)的证书,该证书用于验证服务器通过SSL连接提供的证书。

本文供参考https://www.educative.io/edpresso/keystore-vs-truststore