密钥库和信任库之间有什么区别?信任库和密钥库定义
回答
密钥库包含私钥和证书及其相应的公钥。
信任库包含您期望与之通信的其他方的证书,或来自您信任的证书颁发机构以识别其他方的证书。
密钥库包含私钥。如果您是服务器的 ,或者服务器需要客户端身份验证,则只需要此设置。
信任库包含要信任的CA证书。如果您的服务器的 证书由公认的CA签署,则JRE附带的默认信任库 已经信任它(因为它已经对 信任可信的CA),因此您无需构建自己的, 或添加来自JRE的任何东西。
您还可能有兴趣在Sun的写了,作为标准JSSE文档的一部分:
http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#Stores
通常情况下,信任存储用于仅存储公钥,用于验证目的,例如使用X.509身份验证。出于可管理性的目的,管理员或开发人员很容易将两者混为一个商店。
在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中。 keytool。
在Java中,什么是一个密钥库和一个信任的区别?
下面是关于Java Secure Socket Extension (JSSE) Reference Guide的Java文档的描述。我认为它不会告诉你与别人所说的不同之处。但它确实提供了官方参考。
密钥库/信任
密钥库是键材料的数据库。密钥材料用于多种用途,包括认证和数据完整性。 各种类型的密钥库都可用,包括PKCS12和 Oracle的JKS。
一般来说,密钥库信息可以分为两类:密钥条目和可信证书条目。密钥条目 由实体的身份和其私钥组成,并且可以用于各种加密目的的 。相比之下,除了 实体的身份之外,可信的 证书条目仅包含公钥。因此,不能使用受信任的证书条目 ,其中需要私钥,例如在javax.net.ssl.KeyManager中使用 。在JKS的JDK实现中,密钥库 可能包含密钥条目和可信证书条目。
信任库是一个密钥库,用于决定要信任的内容。如果您收到来自您已信任的实体的数据,并且如果您可以验证该实体是其声称的那个实体,那么您可以假设数据确实来自该实体的 。
如果用户信任该实体,则只应将条目添加到信任库。通过生成密钥对或通过导入证书,用户对该条目给予信任。 信任库中的任何条目都被视为可信条目。
有两个不同的密钥库文件可能会很有用:一个只包含您的密钥条目,另一个包含您的可信证书条目(包括CA证书)。前者 包含私人信息,而后者则不包含。使用两个 文件而不是单个密钥库文件提供了您自己的证书(和对应的私钥)和其他证书之间的逻辑区分的更清晰的分隔 。要为您的私钥提供更多 保护,请将其存储在具有 受限访问权限的密钥库中,并在需要时在更公开访问的密钥库中提供可信证书。
第一和信任存储用于keyStore之间主要的区别是,的trustStore用于通过的TrustManager确定远程连接是否应被信任,密钥库从的KeyManager决定哪些认证证书应当被发送到远程主机所使用SSL握手期间的身份验证。
另一个区别在于,理论上,keyStore只包含在SSL连接中运行服务器时所需的私钥,或者您已在服务器端启用了客户端身份验证,另一方面,trustStore存储来自CA(证书颁发机构)用于信任远程方或SSL连接。
事实上,你可以在同一文件中同时存储私钥和公钥, 鉴于管理这些文件的工具是一样的(密钥工具), 所以你可以使用一个单独的文件同时为目的,但你 可能不应该。
至少在我的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
- 1. Mule信任库和密钥库
- 2. 为apache创建密钥库和信任库QPID
- 3. ssl是必需的密钥库和信任库吗?
- 4. java servlet中的密钥库和信任库的代码位置
- 5. 自定义信任存储与cacerts作为不属于自定义信任库的密钥的回退
- 6. 在Jetty运行时更新密钥库/信任库
- 7. 在一个步骤中针对密钥库验证信任库
- 8. Java RMI SSL是否存在密钥库/信任库错误?
- 9. 从类路径到特定密钥/信任库的路径
- 10. 使用XAdES4j如何将锚定信任到Windows密钥库?
- 11. 如何配置Apache Wink客户端密钥库和信任
- 12. 将公钥从受信任的根CA导入PKCS12密钥库
- 13. 用于密钥库和信任库优点的相同JKS文件
- 14. 运行Java进程时隐藏JKS密钥库/信任库密码
- 15. Java密钥库密码毫无意义?
- 16. 如何从密钥库中读取私钥和公钥密钥库
- 17. WSS4J和PCKS11密钥库
- 18. Tomcat SSL和密钥库
- 19. 密钥库信息getKey()在Android的
- 20. 如何以编程方式创建信任/密钥库?
- 21. 密钥保管库密钥与秘密
- 22. java密钥库和密码设置
- 23. 如何在忘记密钥库后恢复密钥库密码
- 24. 密钥库加载
- 25. 参数密钥库
- 26. 通过密钥库
- 27. WMQ AMS密钥库
- 28. 密钥库密码丢失
- 29. 密钥库更改密码
- 30. Azure密钥库加密
虽然这应该在实践中是真实的,他们可以(并且经常是)一个人。实际上,您可以将私钥和公共证书导入[java home]/jre/lib/security/cacerts默认的“信任库”。 keytool实用程序在两个术语中没有区别,仅在商店类型中(即 - JKS vs. PKCS12)。对于这个问题,Java在源代码中做了同样的事情。您创建一个java.security.KeyStore,并使用信任管理器来管理其中的证书,但没有TrustStore类。 – 2013-09-05 17:19:05
Java本身没有`TrustStore` *。或者我无法在java文档中找到它(例如`java.security.TrustStore`)。当我们想要信任一个证书颁发机构时,它通过`KeyStore`被信任(并且`KeyStore`被传递给`TrustManagerFactory`)。 – jww 2014-03-24 21:16:46
值得一提的是,`KeyStore.load(InputStream是,char [] password)`([docs](http://docs.oracle.com/javase/7/docs/api/java/security/KeyStore.html #load%28java.io.InputStream,%20char []%29))可以接受一个空密码,然后它将访问公共证书。也就是说,想要浏览信任库的代码不需要知道它的密码(出于很好的理由!) – xverges 2015-01-26 17:42:01