JVMが使用しているキーストアを確認するにはどうすればよいですか?


125

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

keytool -import -alias daldap -file somecert.cer

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

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

1
署名されたCSR ない限り、JVM トラストストアに証明書をインポートする必要があります。その場合、証明書を独自のキーストアにインポートする必要があり、その場所がわかっている必要があります。そうでない場合、証明書を生成できませんでした。キーペアまたはCSR。
ローン侯爵2014

回答:


129

キーストアはにありますJAVA_HOME---> JRE -->lib---> security--> cacerts。JAVA_HOMEが構成されている場所、おそらくこれらの場所の1つを確認する必要があります。

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

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

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


6
/ライブラリ/ Java / Home / lib / security / cacerts on Mac OS X 10.9
Sam Barnum

9
*「JAVA_HOME ---> JRE-> lib ---> security-> cacerts」将来の読者のために、末尾の「s」に注意してください。
Keir Nellyer、2014

4
Javaの新しいバージョンをインストールし、JAVA_HOMEが新しいディレクトリを指している場合、証明書の問題が発生しますか?
Kirill Yunussov

1
@Murphy:あなたはこのかもしれないのヘルプstackoverflow.com/questions/5251323/...
黄砂

4
これはキーストアの場所ではなく、トラストストアの場所だと思います。
user2001850 2017

35

キーストアの場所

各keytoolコマンドには、-keystorekeytoolが管理するキーストアの永続キーストアファイルの名前と場所を指定するオプションがあります。キーストアは、デフォルトでは.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関係者が文書化する必要のある空白を埋めました。ありがとうございました!
ジョージパンタゼス2018

26

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内を見ることを知らないのはなぜですか?)、これを機能させるために私がしなければならなかったのはこのためです。


16

「ホーム」ディレクトリにあります。

Windows 7の場合:

C:\Users\<YOUR_ACCOUNT>\.keystore

Linux(Ubuntu)の場合:

/home/<YOUR_ACCOUNT>/.keystore

4
私はWindowsにこのディレクトリを持っていません
simgineer 2013年

1
キーストアを指定せずに-keygenを実行しました。現在のディレクトリにキーストアが作成されることを期待していましたが、あなたの言ったとおり、自宅に作成されました。〜/ .keystore長い間見つかりませんでした!:-)ありがとう。
Eurospoofer 2017

Windowsのパスは、Javaのプロパティから使用されてcygwinの私はその下に追加してみましょうすることuser.homeに等しい$HOMEDRIVE$HOMEPATHのウィンドウで設定していない上$HOMEのcygwinによる設定HOMEDRIVE=C:HOMEPATH=\Users\[YOUR ACCOUNT]
user1708042

13

これは私にとってはうまくいきます:

#!/ bin / bash

CACERTS = $ readlink - e $ dirname $ readlink - e $ which keytool )))/../ lib / security / cacerts 

if keytool - list - keystore $ CACERTS - storepass changeit > / dev / null ; その後  
    echo $ CACERTS
それ以外の場合は、「cacertsファイルが見つかりません。」と
    エコーします。>&2 
    出口1 fi 

Linuxのみ。私のSolarisにはreadlinkがありません。最後に、私はこのPerlスクリプトを使用しました:

#!/ usr / bin / env perl use strict ; 警告を使用しますCwd qw realpath )を使用します。
$ _ = realpath ((grep { -x && - f } map { "$ _ / keytool" } split ':' $ ENV { PATH }))[ 0 ]); 死ぬ「keytoolを見つけることができません」しない限り、定義されました$ _ ; 私の$ keytool = $ _ ; 印刷する


  
  

 "'$ keytool'を使用しています。\ n" ; 
s / keytool $ / /;
$ _ = realpath($ _。 '../ lib / security / cacerts ');
-f $ _でない限り、「cacertsが見つかりません」と表示されます。
私の$ cacerts = $ _;
「「$ cacerts 」にインポートしています。\ n」を印刷します。
`$ keytool -list -keystore" $ cacerts "-storepass changeit`;
$でない限り、「キーコンテナーを読み取れません」と死にますか?== 0;
終了$ ARGV [0] EQ場合は、 ' - D ';
foreach(@ARGV){
    私の$ cert = $ _;
    s /\.[^.]+$//;
    私の$ alias = $ _;
    「「$ cert 」を「$ alias としてインポートしています。\ n」;
    `keytool -importcert -file" $ cert "-alias" $ alias "-keystore" $ cacerts "-storepass changeit`;
    「証明書をインポートできません:$?」$?でない限り == 0;
}

6

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


lib/security相対名のみが指定されている場合、keytoolコマンドが正しいパスを自動的に追加することを知って嬉しいです。
ceving

1
しかし、これは動作しません-importcert。listコマンドはシステム全体の証明書を表示しますが、importコマンドは現在のディレクトリに新しいファイルを生成します。
ceving

1
updatedb; locate cacertscacertsファイルのインストール場所を見つけるのに役立ちます。
sjas 2015年

5

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

 /etc/ssl/certs/java/cacerts

このパスを出力する標準のコマンドがあれば、きっと便利でしょう。


1

公式のOpenJDK 12 Dockerイメージを使用している場合、Javaキーストアの場所は次のとおりです。

/usr/java/openjdk-12/lib/security/cacerts

これは、キーストアではなく、トラストストアです。
ローン侯爵

1
まず、質問(およびあなた自身のコメント)を注意深く読むと、証明書をインポートするトラストストアのように聞こえます。第2に、トラストストアとキーストアの違いはまったく見当違いです。両方とも「キーストア」という用語を使用します。どちらも形式を使用しているためです。3番目:インポートコマンドkeytool -import -file example.crt -alias exampleCA -keystore truststore.jksを見ている場合は、パラメーターも使用します-keystore...非常に不明確なIMHO。そして最後に重要なことですが、私はその正確な問題について探していました-そしてそのような疑問を見つけました。たぶん他の人が同じことを経験します。
jonashackt

さらに、他のすべての回答は、JDKが検証に使用するいわゆる「トラストストア」にも言及しています。また、他のすべての回答も反対票を投じましたか?私はすでに賛成票を受け取っているので、私の答えが助けになった誰かがすでにいます。
jonashackt

0

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

Tomcatを再起動すると(別のjreの場所から実行するように構成を変更した後)、問題が修正されました。


0

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.