我正在尝试在 java 中使用 keytool 导入 PKCS12 证书。只有当密钥库密码与证书密码相同时,它才能正常工作。密钥库是否也必须使用 PKCS12 证书密码?
2 回答
从keytool 的文档中(仅列出与此问题相关的选项):
keytool -importkeystore [ -srcstorepass srcstorepass ] [ -deststorepass deststorepass ] { -srcalias srcalias { -destalias destalias } [ -srckeypass srckeypass ]} [ -destkeypass destkeypass ] ...
将单个条目或所有条目从源密钥库导入到目标密钥库。
当提供-srcalias选项时,该命令会将别名标识的单个条目导入目标密钥库。[...] 如果源条目受密码保护,则srckeypass用于恢复该条目。如果未提供srckeypass ,则 keytool 命令会尝试使用srcstorepass 来恢复条目。如果srcstorepass未提供或不正确,则会提示用户输入密码。目标条目受destkeypass保护。如果未提供destkeypass,则目标条目受源条目密码保护。例如,大多数第三方工具需要 PKCS #12 密钥库中的storepass 和 keypass 相同。为了为这些工具创建 PKCS #12 密钥库,请始终将 -destkeypass 指定为与 -deststorepass 相同。
如果未提供-srcalias选项,则源密钥库中的所有条目都将导入目标密钥库。[...] 如果源条目受密码保护,则srcstorepass用于恢复该条目。如果srcstorepass未提供或不正确,则会提示用户输入密码。[...]目标条目受源条目密码保护。
因此,是否强制使用 PKCS12 证书密码作为密钥库取决于将尝试读取密钥库的应用程序。
如果您依赖 Java 系统属性来通知 JSSE 有关密钥库的信息,则没有用于指定特定密钥别名或其密码的属性。在这种情况下,您别无选择,只能使密码相同。