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

有帮助吗?

解决方案

一个密钥库中包含的私钥,并且所述证书及其相应的公共密钥。

一个信任包含您希望与沟通,你放心,以确定其他方从其他方证书,或从证书颁发机构。

其他提示

  1. 密钥库包含私钥。您仅在您是服务器或服务器需要客户端身份验证时才需要此。

  2. 信任库包含要信任的 CA 证书。如果您的服务器的证书由公认的CA签署,则使用JRE寄货的默认信托存储将已经信任它(因为它已经信任可信赖的CAS),因此您无需构建自己的东西,或者将任何内容添加到一个来自JRE。

来源

在一个SSL握手的的trustStore的目的是验证凭证和<强>密钥库的目的是提供凭证即可。

<强>的keyStore

的keyStore在Java中存储专用密钥和对应于它们的公钥证书,并要求,如果你是SSL服务器或SSL需要客户端身份验证。

<强>信任库

从第三方

信任库存储证书,Java应用程序通信或通过CA签名证书(证书颁发机构如Verisign,Thawte安全后,GeoTrust或GoDaddy),它可以被用来识别第三方。

<强>的TrustManager

的TrustManager确定远程连接是否应该可信与否,即远程方是否是它声称是谁和的KeyManager决定哪些认证凭证应SSL握手期间发送给用于认证远程主机。

如果你是一个SSL服务器,你将在密钥交换算法使用私钥和发送对应于你的公钥到客户端证书,此证书是从的keyStore收购。在SSL客户端,如果用Java编写的,它会使用存储在证书的trustStore来验证服务器的身份。 SSL证书是最常用当属的 .CER 文件,其通过使用任何密钥管理实用程序例如加入的keyStore或的trustStore的密钥工具

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

您也可能有兴趣在来自Sun写时,作为标准JSSE文档的一部分:

HTTP://文档。 oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#Stores

典型地,该信任存储用于存储唯一的公共密钥,用于验证的目的,如与X.509认证。用于管理的目的,这是很常见的管理员或开发者简单地混为一谈两个成一个单一的存储。

  

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

下面是从Java文档在 Java安全套接字扩展(JSSE)参考指南。我不认为它会告诉你任何东西从其他人所说的不同。但它确实提供的官方参考。

  

<强>密钥库/信任

     

密钥库是键材料的数据库。主要材料用于各种用途,包括身份验证和数据完整性。   各种类型的密钥库可供选择,包括PKCS12和   Oracle的JKS。

     

一般来说,密钥存储信息可被分成两大类:密钥条目和受信任的证书的条目。一键进入   由实体的身份和其私钥的,并且可以使用   用于各种加密的目的。相反,可信   凭证录入只包含除公钥   实体的身份。因此,受信任的证书项不能被用于   其中私钥是必需的,如在   javax.net.ssl.KeyManager。在JDK实现JKS的,密钥库   可同时包含键输入和受信任的证书的条目。

     

一个信任是做什么信任决策时所使用的密钥库。如果从实体接收数据,你   已经相信,如果你可以验证实体是一个   它声称是,那么你可以假设数据真正从来到   该实体。

     

的条目应该只被添加到一个信任如果用户相信实体。由任一生成密钥对或通过导入   证书,用户给予信任该条目。在任何条目   信任被认为是可信的条目。

     

这可能是有两个不同的密钥库文件是有用的:一个只包含你的关键条目,以及其他包含您   受信任的证书项,包括CA证书。前者   包含私人信息,而后者则没有。使用两个   文件,而不是一个单一的密钥存储文件提供了一个清洁器分离   自己的证书之间的逻辑区别的(和   相应的私有密钥)和其他人的证书。为了提供更多的   为您的私有密钥的保护,它们存储在一个密钥库   限制访问,并在更提供了可信证书   如果需要的话可公开访问的密钥库中。

  1. trustStore 和 keyStore 之间的第一个也是主要区别是 trustStore 由 TrustManager 使用来确定远程连接是否应该受信任,keyStore 由 KeyManager 使用来决定在 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. 。您可能还需要在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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top