web-dev-qa-db-ja.com

私のJVMがどのキーストアを使用しているかをどうやって知るのですか

証明書をJVMキーストアにインポートする必要があります。私は以下を使っています:

keytool -import -alias daldap -file somecert.cer

だから私はおそらく私の呼び出しを次のように変更する必要があります。

keytool -import -alias daldap -file somecert.cer -keystore cacerts –storepass changeit
110
jini

あなたのキーストアはあなたのJava_HOME---> JRE -->lib---> security--> cacertsにあります。あなたのJava_HOMEがどこに設定されているかをチェックする必要があります。

  1. コンピュータ--->詳細設定 - >環境変数---> Java_HOME

  2. サーバー起動バッチファイル。

インポートコマンドの-keystore cacertsで(単にcacertsと言うのではなく、ここで上記のJREへのフルパスを指定します)。

113
kosa

キーストアの場所

各keytoolコマンドには、keytoolによって管理されるキーストアの永続キーストアファイルの名前と場所を指定するための-keystoreオプションがあります。キーストアは、デフォルトで、 "user.home"システムプロパティによって決定されるように、ユーザーのホームディレクトリ内の.keystoreという名前のファイルに格納されます。ユーザー名が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

30
dbrin

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がJava_HOMEの中を探すのを知らないのでしょうか)。

23
comfytoday

あなたはそれをあなたの "Home"ディレクトリに見つけることができます。

Windows 7の場合

C:\Users\<YOUR_ACCOUNT>\.keystore

Linux(Ubuntu)の場合:

/home/<YOUR_ACCOUNT>/.keystore
15
Evans Y.

これは私のために働く:

#! /bin/bash

CACERTS=$(readlink -e $(dirname $(readlink -e $(どのキーツール)))/../ lib/security/cacerts)
 
 if keytool -list -keystore $ CACERTS -storepass changeit>/dev/null; echo [$ CACERTS] else 
 echo 'cacertsファイルが見つかりません。' >&2 
 exit 1 
 fi 

Linux専用です。私のSolarisにはreadlinkがありません。結局、私はこのPerlスクリプトを使いました。

#!/usr/bin/env Perl 
を使用; 
警告を使用; 
 Cwd qw(realpath); 
 $ _ = realpath((grep {-x $ _; [&& -f} map {"$ _/keytool"} split( ':'、$ ENV {PATH}))[0]); 
 die "$ _; 
 my $ keytool = $ _; 
 print "Using '$ keytool'。\ n"; 
 s/keytool $ //; 
 $ _ = realpath($ -f $ _; 
 my $ cacerts = $ _; 
印刷しない限り、 "。cacertsを見つけることができません"; _。 '../lib/security/cacerts');
die "'$ cacerts'にインポートしています。\ n"; 
 `$ keytool -list -keystore" $ cacerts "-storepass changeit`; 
 die $以外の場合、「キーコンテナを読み取れません」 == 0; 
 $ ARGV [0] eq '-d'; 
 foreach(@ARGV){
 my $ cert = $ _; 
 s /\.[^.]+$//;
 my $ alias = $ _; 
 print "'$ cert'を '$ alias'としてインポートしています。\ n"; [.____ keytool -importcert -file "$ cert" -alias "$ alias" -keystore "$ cacerts" -storepass changeit`; 
警告 "証明書をインポートできません:$?" $以外なら? == 0; 
} 
13
ceving

DimtryBが述べたように、デフォルトではキーストアはユーザディレクトリの下にあります。しかし、JVMがキーを選択できるようにcacertsファイルを更新しようとしている場合は、jre/lib/securityの下のcacertsファイルを更新する必要があります。証明書が追加されているかどうかを確認するためにコマンドkeytool -list -keystore cacertsを実行してキーを表示することもできます。

6

上記のすべての回答に加えて:

JREディレクトリのcacertsファイルを更新しても問題が解決しない場合は、JDKで更新してみてください。

C:¥Program Files¥Java¥jdk1.8.0_192¥jre¥lib¥security

0
VSh

Debianでは、openjdkのバージョン "1.8.0_212"を使って、ここにcacertsを見つけました。

 /etc/ssl/certs/Java/cacerts

このパスを出力する標準的なコマンドがあるならば確かに便利でしょう。

0
Patrick Beard

自動jre更新後に(ほぼ完全に)削除されたjreディレクトリから実行されているTomcatでこの問題が発生しました。実行中のjreはjre .../lib/security/cacertsを検出できなくなりました。

Tomcatを再起動すると(設定を別のjreの場所から実行するように変更した後)、問題が解決しました。

0
Nicolas de Jong