Java_HOME
またはJRE_HOME
が定義されていない場合、デフォルトのJavaインストールのcacerts
の場所を取得する方法を探しています。
少なくともOS X
およびLinux
で機能するソリューションが必要です。
はい。 Java -v
は動作すると想定されています:)
Linuxで、$Java_HOME
の場所を見つけます。
readlink -f /usr/bin/Java | sed "s:bin/Java::"
cacerts
はlib/security/cacerts
の下にあります:
$(readlink -f /usr/bin/Java | sed "s:bin/Java::")lib/security/cacerts
mac OS Xで、$Java_HOME
を検索するには、次を実行します。
/usr/libexec/Java_home
cacerts
はHome/lib/security/cacerts
の下にあります:
$(/usr/libexec/Java_home)/lib/security/cacerts
UPDATE(JDKを使用したOS X)
上記のコードは、JDKがインストールされていないコンピューターでテストされました。 JDKがインストールされている場合、 pR0Psが言ったように 、それは
$(/usr/libexec/Java_home)/jre/lib/security/cacerts
OS X 10.10.1(Yosemite)では、cacerts
ファイルの場所が次のように変更されました。
$(/usr/libexec/Java_home)/jre/lib/security/cacerts
これらの証明書にプログラムでアクセスする必要がある場合は、ファイルをまったく使用せず、トラストマネージャーを介してアクセスすることをお勧めします。次のコードは、OpenJDK Test ケースからのものです(ビルドされたcacertsコレクションが空でないことを確認します)。
TrustManagerFactory trustManagerFactory =
TrustManagerFactory.getInstance("PKIX");
trustManagerFactory.init((KeyStore) null);
TrustManager[] trustManagers =
trustManagerFactory.getTrustManagers();
X509TrustManager trustManager =
(X509TrustManager) trustManagers[0];
X509Certificate[] acceptedIssuers =
trustManager.getAcceptedIssuers();
そのため、ファイルの場所やキーストアのパスワードを扱う必要はありません。
MacOS Mojaveでは、場所は次のとおりです。
/Library/Java/JavaVirtualMachines/jdk1.8.0_192.jdk/Contents/Home/jre/lib/security/cacerts
Sdkmanを使用してJavaバージョンを管理する場合、cacertsは
~/.sdkman/candidates/Java/current/jre/lib/security
High Sierraでは、cacertsは/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/security/cacerts
にあります
Readlink -f "which Java
"を参照することもできます。ただし、すべてのバイナリラッパーで機能するとは限りません。 Javaクラスを実際に開始することをお勧めします。