据我所知,密钥库通常会保存私钥/公钥,而信任库仅存储公钥(并代表您打算与之通信的受信任方的列表)。嗯,这是我的第一个假设,所以如果这不正确,我可能还没有很好地开始......
我有兴趣了解使用 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等有什么关系?
这个术语确实有点令人困惑,但两者javax.net.ssl.keyStore
and javax.net.ssl.trustStore
用于指定要使用哪些密钥库,用于两个不同的目的。密钥库有多种格式,甚至不一定是文件(请参阅这个问题), and keytool
只是一个对它们执行各种操作的工具(导入/导出/列表/...)。
The javax.net.ssl.keyStore
and javax.net.ssl.trustStore
参数是用于构建的默认参数KeyManager
s and TrustManager
s(分别),然后用于构建SSLContext
它本质上包含通过以下方式建立 SSL/TLS 连接时要使用的 SSL/TLS 设置:SSLSocketFactory
or an SSLEngine
。这些系统属性正是默认值的来源,然后由SSLContext.getDefault()
,本身被使用SSLSocketFactory.getDefault()
例如。 (如果您不想使用默认值和特定的值,所有这些都可以通过 API 在许多地方进行自定义SSLContext
是为了特定的目的。)
之间的区别KeyManager
and TrustManager
(因此之间javax.net.ssl.keyStore
and javax.net.ssl.trustStore
)如下(引自JSSE 参考指南):
TrustManager:确定是否
远程身份验证凭据(和
因此连接)应该是
值得信赖。
KeyManager:确定哪个
要发送到的身份验证凭据
远程主机。
(其他参数可用,其默认值在JSSE 参考指南。请注意,虽然信任存储有默认值,但密钥存储没有默认值。)
本质上,密钥库位于javax.net.ssl.keyStore
旨在包含您的私钥和证书,而javax.net.ssl.trustStore
旨在包含当远程方提供其证书时您愿意信任的 CA 证书。在某些情况下,它们可以是同一个存储,尽管使用不同的存储通常是更好的做法(特别是当它们基于文件时)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)