如何找出我的JVM使用的密钥库?
我需要将证书导入到我的JVM密钥库中。 我正在使用以下内容:
keytool -import -alias daldap -file somecert.cer
所以我可能需要可能改变我的电话,如:
keytool -import -alias daldap -file somecert.cer -keystore cacerts –storepass changeit
您的密钥库将在您的JAVA_HOME---> JRE -->lib---> security--> cacerts
。 你需要检查你的JAVA_HOMEconfiguration在哪里,可能是其中一个地方,
-
计算机—>高级 – >环境variables—> JAVA_HOME
-
你的服务器启动batch file
在你的导入命令-keystore cacerts(在这里给上面的JRE的完整path,而不是仅仅说cacerts)。
密钥库位置
每个keytool命令都有一个-keystore
选项,用于指定由keytoolpipe理的密钥库的持久性密钥库文件的名称和位置。 密钥库默认存储在用户主目录中名为.keystore
的文件中,由“user.home”系统属性确定。 给定用户名uName,“user.home”属性值默认为
C:\Users\uName on Windows 7 systems C:\Winnt\Profiles\uName on multi-user Windows NT systems C:\Windows\Profiles\uName on multi-user Windows 95 systems C:\Windows on single-user Windows 95 systems
因此,如果用户名是“cathy”,则“user.home”默认为
C:\Users\cathy on Windows 7 systems C:\Winnt\Profiles\cathy on multi-user Windows NT systems C:\Windows\Profiles\cathy on multi-user Windows 95 systems
http://docs.oracle.com/javase/1.5/docs/tooldocs/windows/keytool.html
这适用于我:
#! /斌/庆典 CACERTS = $(readlink -e $(dirname $(readlink -e $(which keytool)))/../lib/security/cacerts) 如果keytool -list -keystore $ CACERTS -storepass changeit> / dev / null; 然后 echo $ CACERTS 其他 回声'找不到cacerts文件'。 >&2 出口1 科幻
只适用于Linux。 我的Solaris没有readlink。 最后我使用了这个Perl脚本:
#! / usr / bin / env perl 严格使用 使用警告; 使用Cwd qw(realpath); $ _ = realpath((grep {-x && -f} map {“$ _ / keytool”} split(':',$ ENV {PATH}))[0]); 死“找不到keytool”,除非定义$ _; 我的$ keytool = $ _; 打印“使用'$ keytool'。\ n”; S /密钥工具$ //; $ _ = realpath($ _。'../lib/security/cacerts'); 死“找不到cacerts”除非-f $ _; 我的$ cacerts = $ _; 打印“导入'$ cacerts'。\ n”; `$ keytool -list -keystore“$ cacerts”-storepass changeit`; 死“无法读取密钥容器”,除非$? == 0; 如果$ ARGV [0] eq'-d'则退出; foreach(@ARGV){ 我的$证书= $ _; 小号/\.[^.]+$//; 我的$别名= $ _; 打印“导入'$ cert'为'$ alias'。\ n”; `keytool -importcert -file“$ cert”-alias“$ alias”-keystore“$ cacerts”-storepass changeit`; 警告“不能导入证书:$?” 除非$? == 0; }
你可以在你的“Home”目录中find它:
在Windows 7上:
C:\User\[YOUR ACCOUNT]\.keystore
在Linux(Ubuntu)上:
/home/[YOUR ACCOUNT]/.keystore
正如DimtryB提到的,默认情况下,密钥库在用户目录下。 但是,如果您尝试更新cacerts
文件,以便JVM可以select密钥,那么您将不得不更新jre/lib/security
下的cacerts
文件。 您也可以通过执行命令keytool -list -keystore cacerts
查看您的证书是否被添加。
带有Java 1.8的Mac OS X 10.12:
$ JAVA_HOME / JRE / lib / security中
cd $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home
从那里它在:
./jre/lib/security
那里有一个cacerts密钥库。
要将其指定为VM选项:
-Djavax.net.ssl.trustStore=/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/jre/lib/security/cacerts -Djavax.net.ssl.trustStorePassword=changeit
我不是说这是正确的方法(为什么不知道要在JAVA_HOME中查看?),但这是我必须要做的。
我们在从jre目录运行的Tomcat上遇到了这个问题,这个目录在自动jre更新之后(几乎完全)被删除了,所以运行的jre不能再findjre … / lib / security / cacerts,因为它不再存在了。
重新启动Tomcat(在更改configuration以从不同的jre位置运行之后)修复了这个问题。