我了解-keypass
选项是用于“密钥的密码”,而-storepass
选项是用于“密钥库的密码”。
然而,我不明白为什么需要两个密码。
有哪些情况需要两个密码:一个用于存储(在我的情况下为文件),另一个用于密钥。
这是因为Java处理密钥库的方式,所以这不是Android特定的问题。但原因是访问诸如添加/查看信任关系之类的存储是与创建和签署密钥/证书分开的任务。
简而言之,您可能信任某人查看/更新您的密钥库,但不允许使用您在密钥库中存储的密钥进行签名。此外,密钥可以存储在多个密钥库中,并且您希望单独锁定您的密钥。
Keytool使用storepass和keypass来完成不同的任务。
storepass用于访问密钥库。
keypass用于访问特定密钥对的私钥。
然而,除非是用于测试目的或在安全系统上操作,否则不应在命令行或脚本中指定密码。
storepass
密码用于验证密钥库/信任库的完整性。您的keypass
密码实际上是用来解密私钥或秘密密钥的。是的,您仍然可以在不输入任何密码的情况下“查看”公共证书,但是......您将无法验证它们的完整性。那么这有什么意义呢? - ManRowstorepass
就像 "keystore/truststore" MAC(消息认证)的隐藏对称密钥,而keypass
就像实际的 解密密钥。因此,后者实际上保护存储在内部的私有/秘密密钥。 - ManRow