我正在尝试在 OpenJDK 中为 https 连接注册公司证书
我在OpenJDK版本 8 中运行了以下命令。它要求我输入密码。Oracle JDK 的默认密码是“changeit”,但它不适用于 OpenJDK
我曾尝试使用密码,changeit但没有用。
OpenJDK 8:
D:\java8\bin\keytool.exe -keystore "D:\java8\jre\lib\security\cacerts" -importcert -alias sds -file C:\Users\SDS\SDS.crt
Run Code Online (Sandbox Code Playgroud)
OpenJDK 版本 11:
D:\jdk-11.0.2\lib\security>D:\jdk-11.0.2\bin\keytool.exe -keystore D:\jdk-11.0.2\lib\security\cacerts -importcert -alias sds -file C:\Users\SDS\SDS.crt
Run Code Online (Sandbox Code Playgroud)
OpenJDK 8:
keytool ??: java.io.IOException: Keystore was tampered with, or password was incorrect
Run Code Online (Sandbox Code Playgroud)
OpenJDK 11版本,出现同样问题:
Warning: use -cacerts option to access cacerts keystore
Enter keystore password:
keytool error: java.io.IOException: Keystore was tampered with, or password was
Run Code Online (Sandbox Code Playgroud)
对于 OpenJDK 8,首先仔细检查密码:
cd D:\java8\jre\lib\security
keytool -list -keystore cacerts -storepass changeit
Run Code Online (Sandbox Code Playgroud)
如果仍然出现相同的错误,请找到 Java 8 安装的确切版本,并从AdoptOpenJDK下载相应的 ZIP 存档(例如OpenJDK8U-jre_x64_windows_hotspot_8u212b04.zip)。
提取cacerts文件 ( lib/security/cacerts) 并使用二进制 diff 工具(例如fc)将下载的存档中的文件内容cacerts与本地版本进行比较。D:\java8\jre\lib\security\cacerts如果它们不相同,则您的文件可能已被修改。
您可以按照类似的过程来验证 OpenJDK 11 的cacerts文件。
另外:您不需要将自定义证书导入到原始文件中D:\java8\jre\lib\security\cacerts。我个人很少这样做。相反,保留原始文件,但在自定义文件夹中创建它的副本,并将您的公司证书添加到其中。对于您的情况,您可以cacerts从 ZIP 文件复制该文件并将其移动到您的主目录,然后将您的公司证书添加到其中,因为您不知道D:\java8\jre\lib\security\cacerts.
然后,当您运行 Java 程序时,将其配置为使用您的自定义cacerts文件而不是默认cacerts文件:
java -Djavax.net.ssl.trustStore=path/to/custom/cacerts
-Djavax.net.ssl.trustStorePassword=changeit
...
Run Code Online (Sandbox Code Playgroud)
还有一件事:询问您的管理员 - 也许他故意更改了文件的密码cacerts。