信任库和密钥库定义

密钥存储库和信任存储库之间的区别是什么?

170268 次浏览

密钥存储库包含私钥,以及具有相应公钥的证书。

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

  1. keystore中包含私钥。如果你是,你才需要这个 服务器,或者服务器是否需要客户端认证

  2. . xml
  3. 信任库中包含要信任的CA证书。如果你的服务器 证书由认可的CA(默认信任库)签署 将会信任它(因为它已经 信任可信赖的ca),所以你不需要建立自己的, 或者从JRE中添加任何东西。

Source .

您可能还会对Sun的介绍感兴趣,这是标准JSSE文档的一部分:

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

通常,信任存储区仅用于存储公钥,用于验证目的,例如使用X.509身份验证。出于可管理性的目的,管理员或开发人员通常会将两者合并到一个存储中。

在SSL握手中,trustStore用于验证凭证的目的和keyStore是提供凭据的的目的。

密钥存储库

Java中的keyStore存储与其公钥相对应的私钥和证书,如果您是SSL服务器或SSL需要客户端身份验证,则需要。

信任存储库

TrustStore存储来自第三方的证书,您的Java应用程序通信或由CA(证书颁发机构,如Verisign, Thawte, Geotrust或GoDaddy)签署的证书,这些证书可用于识别第三方。

TrustManager

TrustManager决定是否应该信任远程连接,即远程方是否声称是谁,KeyManager决定在SSL握手期间应该将哪些身份验证凭证发送到远程主机进行身份验证。

如果您是SSL服务器,您将在密钥交换算法中使用私钥,并将与您的公钥对应的证书发送给客户端,该证书是从keyStore中获取的。在SSL客户端,如果它是用Java编写的,它将使用存储在trustStore中的证书来验证服务器的身份。SSL证书通常以. c文件的形式出现,通过使用任何密钥管理实用程序(如keytool)将其添加到keyStore或trustStore中。

来源:http://javarevisited.blogspot.ch

在Java中,密钥存储库和信任存储库之间有什么区别?

下面是Java文档中Java Secure Socket Extension (JSSE)参考指南的描述。我不认为这和别人说的有什么不同。但它确实提供了官方参考。

密钥存储库和信任存储库

密钥存储库是密钥材料的数据库。密钥材料用于各种目的,包括身份验证和数据完整性。 可以使用各种类型的密钥存储库,包括PKCS12和 甲骨文JKS。< / p > 一般来说,密钥库信息可以分为两类:密钥项和受信任的证书项。一个关键条目 由实体的身份及其私钥组成,可以使用 用于各种加密目的。相反,一个受信任的人 证书项中除了 实体的身份。因此,不能使用受信任的证书条目 当需要私钥时,例如在 javax.net.ssl.KeyManager。在JKS的JDK实现中,一个密钥库 可以包含密钥条目和受信任的证书条目。

信任库是在决定信任什么时使用的密钥存储库。如果你从一个实体接收数据 已经信任,如果你能验证实体是一个 它声称是,那么你可以假设数据真的来自 实体。< / p > 只有当用户信任某个实体时,才应该将该条目添加到信任存储区。通过生成密钥对或导入 证书,则用户对该条目给予信任。任何在

. Truststore被认为是受信任的条目 有两个不同的密钥库文件可能很有用:一个只包含您的密钥项,另一个包含您的密钥项 受信任的证书项,包括CA证书。前 包含私有信息,而后者不包含。使用两个 文件而不是单个keystore文件提供了更清晰的分离 您自己的证书(和 对应的私钥)和其他证书。提供更多 保护您的私钥,将它们存储在密钥存储库中 限制访问,并提供更受信任的证书 如果需要,可以公开访问密钥库
  1. trustStore和keyStore之间的第一个也是最主要的区别是TrustManager使用trustStore来确定是否应该信任远程连接,而KeyManager使用keyStore来决定在SSL握手期间应该将哪些身份验证凭据发送到远程主机进行身份验证。

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

    事实上,你可以在同一个文件中存储私钥和公钥, 考虑到管理这些文件的工具是相同的(keytool), 所以你可以使用一个文件来实现这两个目的,但是你 李可能不应该。< / p > < / >
  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:密码不能为 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

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

Truststore用于存储来自认证机构(CA)的证书,这些证书用于在SSL连接中验证服务器提供的证书。

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