JavaサーバーがSSLを介して外部Ldapサーバーに接続しようとしています(クエリを実行するためのクライアントとして)。
接続時に送信される証明書はローカルWindowsのトラストストアでのみ信頼されていますが、Javaトラストストア(cacerts)には存在しないため、接続に問題があります。
Windowsが信頼する証明書を信頼するようにJavaに指示する方法はありますか?
または、代わりに、すべての信頼できる証明書をWindowsトラストストアからJavaのcacertsにインポートする方法はありますか?
任意のアイデアをいただければ幸いです。
Windowsが信頼する証明書を信頼するようにJavaに指示する方法はありますか?
いいえ、jre/lib/security/cacerts
でJVMのデフォルトを使用するか、独自のトラストストアを設定する必要があります。
System.setProperty ("javax.net.ssl.trustStore", path_to_your_trustore_jks_file);
System.setProperty ("javax.net.ssl.trustStorePassword", "password");
すべての信頼できる証明書をWindowsトラストストアからJavaのcacertsにインポートする方法はありますか?
自動プロセスはありませんが、Windows証明書ストアから信頼できる機関を抽出し、アプリケーションで使用するように構成されたトラストストアにインポートするプログラムを構築できます(cacertsの変更はお勧めしません)
//Read Windows truststore
KeyStore ks = KeyStore.getInstance("Windows-ROOT");
ks.load(null, null) ;
Windowsでは、次のJVMプロパティを設定します。
javax.net.ssl.trustStore=NUL
javax.net.ssl.trustStoreType=Windows-ROOT
自己署名CAを信頼する64ビットWindowsインストールで実行されるJava7でこれを正常にテストしました。
上記の解決策がうまくいく場合(そうすべきです)、このセクションをスキップできます。それ以外の場合は、 Java Cryptography Extension (JCE)のセットアップを確認してください。これは 最新のJDKにバンドルされています 。 JDKインストールには、セキュリティプロバイダーのリストを含むプロパティファイルが必要です。そのファイルの場所は、Javaバージョンによって異なる場合があります。鉱山は"%Java_HOME%\jre\lib\security\Java.security"
にあります。そのファイル内で、名前がsecurity.provider
で始まるプロパティのセットを見つけます。それらのエントリの1つをSun.security.mscapi.SunMSCAPI
に設定する必要があります。
実行時にプロパティを設定するには、次のJavaコードを使用します。
System.setProperty("javax.net.ssl.trustStore", "NUL");
System.setProperty("javax.net.ssl.trustStoreType", "Windows-ROOT");
Windowsでは、Javaには SunMSCAPI が付属しています。これは、実際には ラッパーであるセキュリティプロバイダーです。 Windows CAPI。
javax.net.ssl.trustStoreType
プロパティをWindows-ROOT
に設定すると、Javaは、ルートCAを含む信頼できる証明書のネイティブWindowsROOTキーストアを参照するように指示されます。 (同様に、javax.net.ssl.keyStoreType
をWindows-MY
に設定すると、ユーザー固有の証明書とそれに対応するキーについて、ネイティブのWindows MYキーストアを参照するようにJavaに指示されます)。
javax.net.ssl.trustStoreType
プロパティがWindows-ROOT
に設定されている場合、javax.net.ssl.trustStore
の値は無視され、eに設定できることが期待されます。 g。 NONE
。 一部のユーザーは、このアプローチは機能しないと報告しています。
この問題の一般的な回避策の1つは、javax.net.ssl.trustStore
をNONE
に設定してから、ファイル名がNONE
のダミーファイルを作成することです。この癖の影響を受けていることに気付いた場合は、javax.net.ssl.trustStore
をNUL
に設定してみてください。そうすれば、ダミーファイルを作成する必要がなくなります。