ホームページ  >  記事  >  Java  >  null KeyManager 配列で `SSLContext.init` を使用すると、「使用できない暗号スイートを無視します」および「共通の暗号スイートがありません」というエラーが発生するのはなぜですか?

null KeyManager 配列で `SSLContext.init` を使用すると、「使用できない暗号スイートを無視します」および「共通の暗号スイートがありません」というエラーが発生するのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-01 08:52:02939ブラウズ

Why am I getting

SSLContext を null KeyManager 配列で初期化しています。

キー マネージャーは (サーバー側で) サーバー証明書を処理するもので、これが何ですかおそらく javax.net.ssl.keyStore を使用するときに設定することを目的としているのでしょう。

ただし、JSSE リファレンス ガイドで説明されているように、最初のパラメータに null を使用しても、思っているような動作はしません。 :

KeyManager[] パラメータが null の場合、空の KeyManager がこのコンテキストに対して定義されます
。 TrustManager[] パラメーターが null の場合、
インストールされているセキュリティ プロバイダーで、
最も優先度の高い TrustManagerFactory 実装が検索され、そこから
適切な TrustManager が取得されます。同様に、
SecureRandom パラメータは null になる可能性があり、その場合はデフォルトの
実装が使用されます。

空の KeyManager には RSA または DSA 証明書が含まれません。したがって、そのような証明書に依存するデフォルトの暗号スイートはすべて無効になります。これが、「利用できない暗号スイートを無視しています」というメッセージがすべて表示され、最終的には「共通の暗号スイートがありません」というメッセージが表示される理由です。

キーストアをキーストアとして使用したい場合は、次のようにします。それをロードして KeyManagerFactory を初期化する必要があります:

KeyStore ks = KeyStore.getInstance("JKS");
InputStream ksIs = new FileInputStream("...");
try {

ks.load(ksIs, "password".toCharArray());

} ついに {

if (ksIs != null) {
    ksIs.close();
}

}

KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory

    .getDefaultAlgorithm());

kmf.init(ks) 、"keypassword".toCharArray());

SSLContext.init() の最初のパラメータとして kmf.getKeyManagers() を使用します。

他の 2 つのパラメータについては、目に見えてクライアント証明書認証を要求しない場合は、脆弱性の潜在的な原因となるトラスト マネージャーをコピー/ペーストするのではなく、トラスト マネージャーをデフォルト値 (null) のままにする必要があります。また、デフォルトの null SecureRandom を使用することもできます。

以上がnull KeyManager 配列で `SSLContext.init` を使用すると、「使用できない暗号スイートを無視します」および「共通の暗号スイートがありません」というエラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。