JRE 密钥库 - 无法在用户密钥库中导入证书(密码错误)

JRE 密钥库 - 无法在用户密钥库中导入证书(密码错误)

我在 Java 用户密钥库中导入证书时遇到问题。(在 appdata\LocalLow\Sun\Java\Deployment\Security 中)。

我已经编写了脚本来将证书添加到“machine”密钥库(位于 C:\Program Files... 中),这些脚本使用默认密码“changeit”即可工作。但如果我尝试使用此密码(或 changeme,适用于 Mac OS IIRC),我无法在用户密钥库中列出或导入证书,例如 trust.certs 和 trust.cacerts。这些证书还有其他“默认密码”吗?

下面是我使用的命令的示例:

.\keytool.exe -import -file C:\temp\CACERT_G3.cer -keystore "C:\Users\username\AppData\LocalLow\Sun\Java\Deployment\security\trusted.cacerts" -v -storepass "changeit"
erreur keytool : java.io.IOException: Keystore was tampered with, or password was incorrect
java.io.IOException: Keystore was tampered with, or password was incorrect
        at sun.security.provider.JavaKeyStore.engineLoad(Unknown Source)
        at sun.security.provider.JavaKeyStore$JKS.engineLoad(Unknown Source)
        at sun.security.provider.KeyStoreDelegator.engineLoad(Unknown Source)
        at sun.security.provider.JavaKeyStore$DualFormatJKS.engineLoad(Unknown Source)
        at java.security.KeyStore.load(Unknown Source)
        at sun.security.tools.keytool.Main.doCommands(Unknown Source)
        at sun.security.tools.keytool.Main.run(Unknown Source)
        at sun.security.tools.keytool.Main.main(Unknown Source)
Caused by: java.security.UnrecoverableKeyException: Password verification failed
        ... 8 more

(提出此要求的原因是,当我们将证书放入机器密钥库时,我们的应用程序会忽略证书,但如果用户使用控制面板 GUI 手动将证书添加到密钥库中,它就可以正常工作。所以我们必须将该解决方案部署到 18k+ 用户)

答案1

Java 语言用户trusted.cacerts存储默认是空的,例如:

keytool -list -storepass "" -keystore .\path\to\Sun\Java\Deployment\Security\trusted.certs

但它也位于用户空间,因此任何用户都可以更改密码、删除密钥库等。


但是,您提到使用控制面板 GUI、certmgr.msc(用户)或 certlm.msc(系统),它们管理视窗信任库。这些是分离位置,但用于相同的目的

Java 可以使用 Windows 存储,其选项如下-Djavax.net.ssl.trustStoreType=WINDOWS-ROOT,尽管有一些其他设置必需,具体取决于您的配置。

将证书导入 Windows 受信任的 CA 证书可以使用不同的工具完成,例如组策略、cmd(certutil.exe)或电源外壳, 例如

相关内容