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 サイトの他の関連記事を参照してください。