java - .jks keystore 的用途是什么?

标签 java certificate key keytool jks

我被要求根据我们创建的证书创建一个 jks keystore 。我已经阅读了一些关于该主题的内容,但我仍然对一些项目感到困惑:

证书的私钥应该存储在 .jks keystone 中吗?

如果是 - 这是在哪里输入的?使用 keytool,创建 jks 文件不需要一个。

如果不是 - jks 文件的用途是什么?为什么我的应用程序需要它而不是直接读取证书?如果 keytool 只包含公钥,为什么它需要密码才能创建 jks?

最佳答案

key 存储的目的是使用基于密码的算法保护加密 key 的隐私和完整性。隐私意味着 key 是保密的;它们只能由知道密码的人使用;这对于私钥和 secret key 很有用。完整性意味着知道密码的人可以检测到 key 的更改;这对于公钥和私钥很有用。

是否应该包含私钥取决于您要做什么。例如,如果您正在为您的服务器创建一个 keystore 以便它可以向客户端验证自己,那么它应该包含私钥。如果您创建了一个自签名证书,并希望为客户提供一个 keystore 以便他们可以验证您的服务,那么它应该包含私钥。

如果您有一个预先存在的 key 对,并希望将其导入 JKS 格式的 keystore ,最简单的方法可能是 use OpenSSL to create a PKCS #12 format key store, then use keytool to convert that to a JKS key store.通常,keytool 期望自己生成 key 对,因此私钥将从一开始就存储在那里。

在使用公钥或证书加密消息或验证签名之前,您应该验证其完整性。否则,攻击者可以用他拥有的 key 替换 key 并充当中间人。如果您只是从文件中读取公钥,您并不知道它确实属于您的预期接收者。但是,如果您将基于密码的消息验证码与公钥一起存储,则可以确保它未被篡改。

关于java - .jks keystore 的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38317020/

相关文章:

uwp - 如何使用可以侧面加载的证书创建UWP应用

java - 将字符串转换为键

python - 用 2 个键引用一个值制作字典

java - 如何将多个 .xsd 生成到同一个 ObjectFactory 中?

java - 谷歌眼镜中的 Hello World

Java 将值添加到指向另一个 ArrayList 中的值的 ArrayList

python - 在字典键中查找字符串,其中字符串不完全是字典中的键

即使 newValue == oldValue 也会触发更改事件的 JavaFX ObjectProperty

.NET HttpClient - 有条件地忽略证书错误

java - 有没有办法漂亮地打印 X509Certificate?