web-dev-qa-db-ja.com

Windowsトラストストア、特にユーザーのトラストストアを使用するようにJREを設定します

概要:Javaオプション-Djavax.net.ssl.trustStoreType=WINDOWS-ROOTはJavaがコンピュータアカウントにWindowsトラストストアを使用することを許可します。ユーザーアカウントにWindowsトラストストアを使用できるオプションは何ですか?

Windowsクライアントで実行するJavaアプリケーションがあります。アプリケーションは、さまざまなソースからデータを取得します。その一部は、デフォルトのcacertsファイルにない証明書を使用します。

ユーザーが外部データにアクセスするアイテムを選択すると、外部サイトの証明書をダウンロードするように求められます。セキュリティ設定により、cacertsファイルはユーザーに対して読み取り専用です。 JREはcacertsに証明書をインポートできないため、外部はダウンロードされません。そして、ユーザーは何度も何度も証明書をダウンロードするよう求められます。

ユーザーにcacertsへの書き込みアクセス権が付与されている場合、問題は発生しません。ただし、セキュリティチームは、そのファイルへの書き込みアクセス権を通常のユーザーに許可しません。彼らのポリシーは、ユーザー自身のプロファイルの外にあるC:ドライブ上のファイルは、読み取り/書き込みを禁止することです。

Java Windowsトラストストアを使用するための回避策を見つけました。起動スクリプトにフラグ-Djavax.net.ssl.trustStoreType=WINDOWS-ROOTを追加しました。これにより、強制的にJavaユーザーが書き込み可能なWindowsトラストストアを使用する。

残念ながら、ユーザーは自分の証明書ストアにのみ書き込むことができ、コンピューターの証明書ストアには書き込むことができません。アプリを管理者として実行すると、証明書がコンピューターのストアにインポートされます。その後、通常のユーザーは証明書のダウンロードを求められません。ただし、管理者権限で1度実行しないと、JavaがWindowsコンピューターアカウントに書き込みを試みるため、証明書はインポートされませんストア。cacertsと同じように厳重にロックダウンされます。

Java=コンピュータアカウントのストアだけでなく、Windowsトラストストア全体を使用するように強制するフラグはありますか?

5
Bagheera

JSSEリファレンスガイド はあなたの質問に答えます。

この場合、そのようなプロパティーは存在するが、それが指定するファイルが存在しない場合、トラストストアは使用されません。 javax.net.ssl.trustStoreプロパティが存在しない場合、デフォルトのトラストストアが検索されます。 Java-home/lib/security/jssecacertsという名前のトラストストアが見つかった場合、それが使用されます。そうでない場合、Java-home/lib/security/cacertsという名前のトラストストアが検索され、使用されます(存在する場合)。

これら2つのファイルjssecacertsまたはcacertsのいずれかを上書きする権限がない場合、質問に対する答えは「いいえ」です。

0
Eugène Adell