信托店vs钥匙店

我知道密钥库通常会拥有私钥/公钥和只有公用密钥的信任存储区(并且代表您希望与之通信的可信方的列表)。 那么,这是我的第一个假设,所以如果这是不正确的,我可能还没有开始很好......

我对使用keytool时了解商店的方式/时间区分商店感兴趣。

所以,我已经创建了一个keystore

keytool -import -alias bob -file bob.crt -keystore keystore.ks

它创建我的keystore.ks文件。 我对这个问题的回答yes ,但我不清楚这是否创建了密钥库文件或信任库文件? 我可以将我的应用程序设置为使用该文件。

-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.keyStorejavax.net.ssl.trustStore用于指定要使用哪些密钥存储库,用于两个不同的目的。 密钥库有各种格式,甚至不一定是文件(见这个问题), keytool只是一个工具来执行它们的各种操作(import / export / list / ...)。

javax.net.ssl.keyStorejavax.net.ssl.trustStore参数是用于构建KeyManagerTrustManager (分别)的默认参数,然后用于构建SSLContext ,该SSLContext基本上包含要在使用时使用的SSL / TLS设置通过SSLSocketFactorySSLEngine进行SSL / TLS连接。 这些系统属性就是默认值来自的地方,然后由SSLContext.getDefault()使用,例如SSLSocketFactory.getDefault()使用它本身。 (所有这些都可以通过API在许多地方定制,如果你不想使用默认值和特定的SSLContext s为特定的目的。)

KeyManagerTrustManager (以及javax.net.ssl.keyStorejavax.net.ssl.trustStore )之间的区别如下(引用JSSE参考指南):

TrustManager:确定是否应该信任远程认证凭证(以及连接)。

KeyManager:确定发送到远程主机的认证凭证。

(其他参数可用,其默认值在JSSE参考指南中进行了介绍。请注意,尽管信任存储库有默认值,但密钥存储区没有其他参数。)

本质上, javax.net.ssl.keyStore的密钥库旨在包含您的私钥和证书,而javax.net.ssl.trustStore旨在包含您愿意信任的远程方在出现其证书时使用的CA证书证书。 在某些情况下,它们可以是同一个商店,但使用不同商店通常更好(尤其是基于文件的商店)。


密钥库和信任库文件没有区别。 两者都是专有的JKS文件格式的文件。 区别在于:据我所知,Java只会使用javax.net.ssl.trustStore引用的存储来查找创建SSL连接时要信任的证书。 键和javax.net.ssl.keyStore 。 但从理论上讲,使用同一个文件进行信任和密钥存储是很好的做法。


密钥库由服务器用来存储私钥,而信任库由第三方客户端用来存储由服务器提供的公钥来访问。 我已经在我的生产应用程序中这样做了。 以下是为SSL通信生成Java证书的步骤:

  • 在Windows中使用keygen命令生成证书:
  • keytool -genkey -keystore server.keystore -alias mycert-20161109 -keyalg RSA -keysize 2048 -validity 3950

  • 自我认证证书:
  • keytool -selfcert -alias mycert-20161109 -keystore server.keystore -validity 3950

  • 将证书导出到文件夹:
  • keytool -export -alias mycert-20161109 -keystore server.keystore -rfc -file mycert-20161109.cer

  • 将证书导入到客户端Truststore中:
  • keytool -importcert -alias mycert-20161109 -file C: certs mycert-20161109 -keystore .truststore

    链接地址: http://www.djcxy.com/p/21833.html

    上一篇: Trust Store vs Key Store

    下一篇: Java: SSL Clientside Authentication with self