証明書を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_HOMEがどこに設定されているかをチェックする必要があります。
コンピュータ--->詳細設定 - >環境変数---> Java_HOME
サーバー起動バッチファイル。
インポートコマンドの-keystore cacertsで(単にcacertsと言うのではなく、ここで上記のJREへのフルパスを指定します)。
キーストアの場所
各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
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の中を探すのを知らないのでしょうか)。
あなたはそれをあなたの "Home"ディレクトリに見つけることができます。
Windows 7の場合
C:\Users\<YOUR_ACCOUNT>\.keystore
Linux(Ubuntu)の場合:
/home/<YOUR_ACCOUNT>/.keystore
これは私のために働く:
#! /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; }
DimtryBが述べたように、デフォルトではキーストアはユーザディレクトリの下にあります。しかし、JVMがキーを選択できるようにcacerts
ファイルを更新しようとしている場合は、jre/lib/security
の下のcacerts
ファイルを更新する必要があります。証明書が追加されているかどうかを確認するためにコマンドkeytool -list -keystore cacerts
を実行してキーを表示することもできます。
上記のすべての回答に加えて:
JREディレクトリのcacertsファイルを更新しても問題が解決しない場合は、JDKで更新してみてください。
C:¥Program Files¥Java¥jdk1.8.0_192¥jre¥lib¥security
Debianでは、openjdkのバージョン "1.8.0_212"を使って、ここにcacertsを見つけました。
/etc/ssl/certs/Java/cacerts
このパスを出力する標準的なコマンドがあるならば確かに便利でしょう。
自動jre更新後に(ほぼ完全に)削除されたjreディレクトリから実行されているTomcatでこの問題が発生しました。実行中のjreはjre .../lib/security/cacertsを検出できなくなりました。
Tomcatを再起動すると(設定を別のjreの場所から実行するように変更した後)、問題が解決しました。