查找默认的 java cacerts 文件

查找默认的 java cacerts 文件

java 和 keytool 安装路径:

C:\Users\foobar>where java
C:\Program Files\Java\jdk1.8.0_211\bin\java.exe

C:\Users\foobar>where keytool
C:\Program Files\Java\jdk1.8.0_211\bin\keytool.exe

cacerts因为它是目录中唯一的文件Java,所以我假设这是默认文件:

"C:\Program Files\Java\jdk1.8.0_211\jre\lib\security\cacerts"

keytool输出-包含特定cacerts密钥库文件的路径:

C:\Users\foobar>keytool -list -keystore "C:\Program Files\Java\jdk1.8.0_211\jre\lib\security\cacerts"
Enter keystore password:
Keystore type: jks
Keystore provider: SUN

Your keystore contains 98 entries

verisignclass2g2ca [jdk], Aug 25, 2016, trustedCertEntry,
Certificate fingerprint (SHA1): C9:B4:1C:EA:F2:9D:95:B6:CC:A0:08:1B:67:EC:9D:B3:EA:C4:47:76
digicertassuredidg3 [jdk], Aug 25, 2016, trustedCertEntry,
Certificate fingerprint (SHA1): 00:F4:9F:DC:0F:48:2C:AB:30:89:F5:17:A2:4F:9A:48:C6:C9:F8:A2
...
...
...
verisignuniversalrootca [jdk], Aug 25, 2016, trustedCertEntry,
Certificate fingerprint (SHA1): 36:30:A5:FB:87:3B:0F:A7:7B:B7:0D:54:79:CA:35:66:87:72:30:4D

keytool输出 - 没有特定密钥库文件的路径cacerts

C:\Users\foobar>keytool -list
Enter keystore password:
Keystore type: jks
Keystore provider: SUN

Your keystore contains 0 entries

为什么keytool输出不一样?

当未定义特定的密钥库时,cacerts正在使用/引用哪个文件?

答案1

尽管很激进而且似乎完全不为人所知,但你可以考虑看看文档

常用选项

-密钥库密钥库

.keystore... 如果 [未] 指定,则用户主目录中名为 [] 的默认密钥库文件...

(尽管所述的限定条件——“如果使用 JKS 存储类型”——是不精确的;此行为和默认适用于所有基于文件的存储类型。JKS 是 8 中的默认设置,但在 9 中,默认设置更改为 PKCS12,并且两者都是基于文件的。)

Java 11 文档更加具体;它补充道:

选项值示例

以下示例显示了各种选项值的默认值:

...

-keystore <the file named .keystore in the user's home directory>

附言:你可能还想知道,在当前的 Windows 上——从 Vista 或可能是 Seven 开始,我不记得具体是什么版本了——如果你安装到默认位置,然后\Program Files [(x86)]尝试调整这样做cacerts(例如添加您自己的 CA)可能不起作用。Windows 确实不喜欢人们手动更改这些子树中的任何文件,并且通常会“虚拟化”它们,这样您的写入操作似乎有效,但文件实际上并没有改变。(我相信组策略所做的更改确实有效,但我不在 Windows 域中,因此无法检查。)如果您在其他地方安装,则不会出现此问题。

PPS:还发现了一个交叉重复:https://stackoverflow.com/questions/8980364/how-do-i-find-out-what-keystore-my-jvm-is-using

答案2

我偶然找到了答案 – 默认引用的文件在这里:

C:\Users\foobar\.keystore

我想这可能会根据您如何/在何处安装 Java 而有所不同。

相关内容