当前位置: 首页 > 面试题库 >

Java信任存储与密钥存储-使用keytool创建

乐正涵意
2023-03-14
问题内容

据我了解,密钥库通常会保存私钥/公钥,而信任库通常只保存公钥(并代表你打算与之通信的受信任方的列表)。好吧,这是我的第一个假设,因此,如果这不正确,那么我可能起步并不顺利。

不过,我很想了解使用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.keyStorejavax.net.ssl.trustStore用来指定密钥库来使用,用于两个不同的目的。密钥库有多种格式,甚至不一定是文件(请参阅此问题),keytool它只是对密钥库执行各种操作(导入/导出/列表/ …)的工具。

javax.net.ssl.keyStorejavax.net.ssl.trustStore参数用于建立默认参数KeyManagerS和TrustManagerS(分别地),然后用于构建SSLContext制备SSL经由/ TLS连接时,其基本上包含SSL / TLS设置来使用SSLSocketFactorySSLEngine。这些系统属性正是默认值的来源,然后SSLContext.getDefault()SSLSocketFactory.getDefault()(例如)本身使用。(如果你不想SSLContext为给定目的使用默认值和特定的,则可以在许多地方通过API定制所有这些。)

的之间的差KeyManager和TrustManager(并因此之间javax.net.ssl.keyStorejavax.net.ssl.trustStore)如下(从引JSSE REF指南):

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

KeyManager:确定要发送到远程主机的身份验证凭据。

(其他参数可用,并且它们的默认值在JSSE参考指南中进行了描述。请注意,尽管信任存储有一个默认值,但密钥存储没有一个默认值。)

本质上,其中的密钥库javax.net.ssl.keyStore用于包含你的私钥和证书,而密钥库则用于包含html" target="_blank">javax.net.ssl.trustStore当远程方出示证书时你愿意信任的CA证书。在某些情况下,它们可以是一个存储库,并且可以是同一存储库,尽管通常最好使用不同的存储库(尤其是基于文件的存储库)。



 类似资料:
  • 问题内容: 据我了解,密钥库通常会保存私钥/公钥,而信任库通常只保存公钥(并且代表您打算与之通信的受信任方的列表)。好吧,这是我的第一个假设,因此,如果这不正确,那么我可能起步并不顺利… 我很想了解使用keytool时如何/何时区分商店。 因此,到目前为止,我已经使用 这将创建我的keystore.ks文件。我回答了我是否信任bob的问题,但是我不清楚这是否创建了密钥库文件或信任库文件?我可以将我

  • 我想用自签名证书连接到TLS服务器,所以我需要一个自定义信任存储。似乎绝对需要密码才能导入证书,但我真的不需要密码保护信任存储区。使用标准密码“changeit”可以工作,但我更希望没有密码。 请注意,这是一个“信任存储”,而不是“密钥存储”,因此信任存储中根本没有秘密材料:只有服务器的证书,因此客户机可以验证服务器是可信的。 使用可以吗?是否有其他工具可以从信任存储区中移除密码?了解到身份验证信

  • 我在java中实现了一个加密和解密器,它可以在密钥存储库文件上工作。我的密钥库已经有两个RSA的别名,但现在我需要添加DES。 有办法通过keytool做到这一点吗?我找不到任何地方可以做这件事。

  • 证书、私钥(客户端)和客户端证书都是pem格式的,我必须将它们添加到信任存储区和密钥存储区中。我该怎么做呢?到目前为止,我在cmd(windows)中有命令: > 要生成PKC(key:客户端私钥,cert:客户端cert,CA:CACERT):openssl pkcs12-inKey key.pem-in cert.pem-export-out keystored.p12-certfile CA

  • 我想用keytool程序创建一个PKCS12密钥存储格式的证书。 密钥库的扩展名为。

  • 我有一个premium storage account,在创建这个帐户后我就启用了加密,我找到了这个链接https://docs.microsoft.com/en-us/azure/storage/storage-service-encryption来检查blob是否加密。 现在,如果我使用Azure key vault加密OS盘和数据盘,它也用于保护静止数据,但加密存储帐户也会做同样的事情。有谁