【发布时间】:2011-09-14 12:24:50
【问题描述】:
我了解密钥库通常会保存私钥/公钥,而信任库仅保存公钥(并代表您打算与之通信的受信任方的列表)。嗯,这是我的第一个假设,所以如果这不正确,我可能还没有很好地开始......
我有兴趣了解使用 keytool 时如何/何时区分商店。
到目前为止,我已经使用
创建了一个密钥库keytool -import -alias bob -file bob.crt -keystore keystore.ks
创建我的 keystore.ks 文件。我回答 yes 我是否信任 bob 的问题,但我不清楚这是否创建了密钥库文件或信任库文件?我可以将我的应用程序设置为使用该文件。
-Djavax.net.ssl.keyStore=keystore.ks -Djavax.net.ssl.keyStorePassword=x
-Djavax.net.ssl.trustStore=keystore.ks -Djavax.net.ssl.trustStorePassword=x
并且设置了System.setProperty( "javax.net.debug", "ssl"),我可以在受信任的证书下看到证书(但不在密钥库部分下)。我要导入的特定证书只有一个公钥,我打算用它通过 SSL 连接向 Bob 发送内容(但也许最好留给另一个问题!)。
任何指示或澄清将不胜感激。无论您导入什么,keytool 的输出是否都相同,并且只是约定一个是密钥库,另一个是信任库?使用SSL等有什么关系?
【问题讨论】:
-
我不确定您所说的“我正在导入的特定证书只有一个公钥”是什么意思:它只是一个公钥(即不是证书)还是非 CA 证书?
-
嗯,不确定。我从浏览器导出为 PEM 文件。这有帮助吗?
-
如果是从浏览器导出的,可能是证书。它是服务器证书(CN 或 subjectAltName 与服务器名称匹配)吗?它是 CA 证书吗(在 Basic Constraints 下查看,您应该可以使用浏览器看到它)。
-
tl;dr: 信任存储包含公共的、受信任的根 (CA) 证书,而身份/密钥存储包含私有的身份证书;但是,就文件而言,它们是相同的。
-
技术上没有区别,只是将可信证书与服务器/客户端证书分开的一些逻辑和舒适性。