如何找出我的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在哪里,可能是其中一个地方,

  1. 计算机—>高级 – >环境variables—> JAVA_HOME

  2. 你的服务器启动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位置运行之后)修复了这个问题。