25

スクライブOAuthライブラリを使用しているときに次の例外が発生します。

Caused by: javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty

いくつかのグーグルに基づいて、私はどういうわけかJVMトラストストアをセットアップする必要があるようです。

なぜこれを行う必要があるのですか?OSのデフォルトのトラストストアを使用するようにJavaVMに指示するにはどうすればよいですか?(私の場合はMac OS X)。

4

4 に答える 4

20

Apple JCAプロバイダーを使用して、OSXキーチェーンをJavaトラストストアとして使用できます。次のシステムプロパティを使用してJVMを起動するだけです。

-Djavax.net.ssl.trustStoreType=KeychainStore

hagrawalの回答JAVA_TOOL_OPTIONSで説明されているように、環境変数を使用して、開始されたすべてのJVMにこのプロパティを設定できます。

于 2019-07-20T00:57:16.193 に答える
14

VMの起動時にこのシステムを適切に追加することで、デフォルトのトラストストアをセットアップできます。

-Djavax.net.ssl.trustStore=/Library/Java/Home/lib/security/cacerts

なぜこれを行う必要があるのか​​、まだわかりません。これがデフォルトである必要があります。毎回これを追加するのも非常に面倒です。より良い方法はありますか?たとえば、いくつかのOS設定はありますか?

于 2013-01-11T17:19:49.297 に答える
6

SSLを処理するときにJAVAがデフォルトのトラストストアを識別する方法が必要であることは誰にとっても明らかだと思います。そのため、この情報は何らかの方法でJAVAに渡されているので、手元にある「更新された」質問はそれを行う方法だと思います。 1回限りの方法で、その後は忘れてしまいます。

私が見つけた最善の方法はJAVA_TOOL_OPTIONS、OSレベルで環境変数を設定することでした。この環境変数が設定されている場合、JAVAは、この環境変数で指定した引数を使用してデフォルトで起動されます。

-Djavax.net.ssl.trustStore=/Library/Java/Home/lib/security/cacerts したがって、 JVMを起動するたび に設定する必要はありません。代わりJAVA_TOOL_OPTIONS に、OSレベルで環境変数を「1回」に値をas -Djavax.net.ssl.trustStore=/Library/Java/Home/lib/security/cacerts に設定​​すると、完了です。

以下は、「さらなる読み物」の#1からの抜粋です。

この環境変数が設定されている場合、(JNI Invocation APIの)JNI_CreateJavaVM関数は、環境変数の値をJavaVMInitArgs引数で指定されたオプションの前に追加します。

以下に注意すべき注意点のみを記載します。「さらなる読み物」の#1からの抜粋です。

場合によっては、セキュリティ上の理由でこのオプションが無効になります。たとえば、Solaris OSでは、有効なユーザーまたはグループIDが実際のIDと異なる場合にこのオプションが無効になります。

以下は注意すべきもう1つの警告(「さらなる読み物」の#1からの抜粋)ですが、コンテキストはVM選択の議論に関するものではないため、関連性はありませんが、言及するだけです。

この環境変数はJNI_CreateJavaVMが呼び出されたときに検査されるため、ランチャーによって通常処理されるオプション(たとえば、-clientまたは-serverオプションを使用したVMの選択)でコマンドラインを拡張するために使用することはできません。

さらなる読み物:

于 2016-12-29T01:14:50.907 に答える
0

ああ!私はこの問題を知っています。私も同様の問題を抱えていましたが、それはOSXのJavaバインディングに関連していました。最新バージョンをインストールすると、修正されました。

https://support.apple.com/en-us/HT204036

于 2016-12-28T15:46:45.557 に答える