我被要求根据我们创建的证书创建一个 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/