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 而有所不同。