如何找出我的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位置运行之后)修复了这个问题。