web-dev-qa-db-ja.com

デフォルトのJavaインストールのcacertsの場所を取得する方法は?

Java_HOMEまたはJRE_HOMEが定義されていない場合、デフォルトのJavaインストールのcacertsの場所を取得する方法を探しています。

少なくともOS XおよびLinuxで機能するソリューションが必要です。

はい。 Java -vは動作すると想定されています:)

73
sorin

Linuxで、$Java_HOMEの場所を見つけます。

readlink -f /usr/bin/Java | sed "s:bin/Java::"

cacertslib/security/cacertsの下にあります:

$(readlink -f /usr/bin/Java | sed "s:bin/Java::")lib/security/cacerts

mac OS Xで、$Java_HOMEを検索するには、次を実行します。

/usr/libexec/Java_home

cacertsHome/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
128
Kuf

OS X 10.10.1(Yosemite)では、cacertsファイルの場所が次のように変更されました。

$(/usr/libexec/Java_home)/jre/lib/security/cacerts
41
pR0Ps

これらの証明書にプログラムでアクセスする必要がある場合は、ファイルをまったく使用せず、トラストマネージャーを介してアクセスすることをお勧めします。次のコードは、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();

そのため、ファイルの場所やキーストアのパスワードを扱う必要はありません。

4
eckes

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
4
Nish

High Sierraでは、cacerts/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/security/cacertsにあります

3
arpurush

Readlink -f "which Java"を参照することもできます。ただし、すべてのバイナリラッパーで機能するとは限りません。 Javaクラスを実際に開始することをお勧めします。

1
eckes