Answers:
您的密钥库将位于您的中JAVA_HOME---> JRE -->lib---> security--> cacerts
。您需要检查JAVA_HOME的配置位置,可能是以下位置之一,
计算机->高级->环境变量-> JAVA_HOME
您的服务器启动批处理文件。
在导入命令-keystore cacerts中(在此处给出上述JRE的完整路径,而不仅仅是说cacerts)。
密钥库位置
每个keytool命令都有一个-keystore
选项,用于为keytool管理的密钥库指定持久性密钥库文件的名称和位置。默认情况下,密钥库存储在.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
~/.keystore
文件!如果我保留该-keystore
参数,则无法确定哪个默认密钥库keytool
定位。我一直在寻找cacerts
机器上其他地方的东西。我没想到keytool会~/.keystore
在主目录中生成,也不希望它被命名.keystore
为cacerts
。您已经填补了Java人员应该记录的空白!谢谢!
具有Java 1.8的Mac OS X 10.12:
$ JAVA_HOME / jre / lib / security
cd $JAVA_HOME
/图书馆/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不知道要在JAVA_HOME中查找?),但这是我必须做的才能使其工作。
您可以在“主”目录中找到它:
在Windows 7上:
C:\Users\<YOUR_ACCOUNT>\.keystore
在Linux(Ubuntu)上:
/home/<YOUR_ACCOUNT>/.keystore
user.home
等于$HOMEDRIVE$HOMEPATH
由Windows设置,而不是$HOME
通过cygwin的其中一套HOMEDRIVE=C:
和HOMEPATH=\Users\[YOUR ACCOUNT]
这对我有用:
#!/ bin / bash CACERTS = $(readlink -e $ {dirname $(readlink -e $ {哪个keytool)))/../ lib / security / cacerts)= $ (readlink - e $ (目录名$ (readlink - e $ (其中keytool )))/../ lib / security / cacerts ) 如果keytool -list -keystore $ CACERTS -storepass changeit> / dev / null; 然后如果keytool - list - keystore $ CACERTS - storepass changeit > / dev / null ; 然后 回声$ CACERTS 其他其他 回显“找不到cacerts文件”。>&2“找不到cacerts文件。” >&2 1号出口1个 科幻科幻
仅适用于Linux。我的Solaris没有读取链接。最后,我使用了以下Perl脚本:
#!/ usr / bin / env perl 使用严格使用严格; 使用警告;使用警告; 使用Cwd qw(realpath);使用Cwd qw (realpath ); $ _ = realpath((grep {-x && -f} map {“ $ _ / keytool”} split(':',$ ENV {PATH}))[0]);;= realpath ((grep { -x && - f } map { “ $ _ / keytool” } split (':' ,$ ENV { PATH }))[ 0 ]);; 除非定义了$ _,否则死掉“找不到键盘工具”;死“无法找到密钥工具” 除非定义$ _ ; 我的$ keytool = $ _;我的$ keytool = $ _ ; 打印“使用'$ keytool'。\ n”;打印“使用'$ keytool'。\ n” ; s / keytool $ //;/ keytool $ / /; $ _ = realpath($ _。'../lib/security/cacerts');lib / security / cacerts '); 死于“找不到证书”,除非-f $ _; 我的$ cacerts = $ _; 打印“导入到'$ cacerts'。\ n”;$ cacerts '。\ n“; `$ keytool -list -keystore“ $ cacerts” -storepass changeit`; die除非$,否则“无法读取密钥容器”?== 0; 如果$ ARGV [0]等于'-d',则退出;- d “; foreach(@ARGV){ 我的$ cert = $ _; s /\.[^.]+$//; 我的$ alias = $ _; 打印“将'$ cert'导入为'$ alias'。\ n”;$ cert '为' $ alias '。\ n“; `keytool -importcert-文件“ $ cert”-别名“ $ alias” -keystore“ $ cacerts” -storepass changeit`; 警告“无法导入证书:$?” 除非$?== 0; }
如DimtryB所述,默认情况下,密钥库位于用户目录下。但是,如果您尝试更新cacerts
文件,以便JVM可以选择密钥,那么您将必须cacerts
在下更新文件jre/lib/security
。您还可以通过执行命令查看密钥,keytool -list -keystore cacerts
以查看是否添加了证书。
lib/security
如果仅给出相对名称,keytool命令会自动添加正确的路径。
-importcert
。list命令显示了系统范围的证书,但是import命令在当前目录中生成一个新文件。
updatedb; locate cacerts
帮助查找cacerts文件的安装位置。
对我而言,使用官方OpenJDK 12 Docker映像,Java密钥库的位置为:
/usr/java/openjdk-12/lib/security/cacerts
keytool -import -file example.crt -alias exampleCA -keystore truststore.jks
那么您还可以使用参数-keystore
...恕我直言,恕我直言。最后但并非最不重要的一点:我正在搜索那个确切的问题-并发现了这个问题。也许其他人也一样。