Maison >Java >javaDidacticiel >Pourquoi est-ce que j'obtiens les erreurs « Ignorer la suite de chiffrement indisponible » et « Aucune suite de chiffrement en commun » lorsque j'utilise « SSLContext.init » avec un tableau KeyManager nul ?

Pourquoi est-ce que j'obtiens les erreurs « Ignorer la suite de chiffrement indisponible » et « Aucune suite de chiffrement en commun » lorsque j'utilise « SSLContext.init » avec un tableau KeyManager nul ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-01 08:52:021068parcourir

Why am I getting

Vous initialisez votre SSLContext avec un tableau KeyManager nul.

Le gestionnaire de clés est ce qui gère le certificat du serveur (côté serveur), et c'est ce que vous souhaitez probablement définir lorsque vous utilisez javax.net.ssl.keyStore.

Cependant, comme décrit dans le guide de référence JSSE, l'utilisation de null pour le premier paramètre ne fait pas ce que vous semblez penser :

Si le paramètre KeyManager[] est nul, alors un KeyManager vide sera
défini pour ce contexte. Si le paramètre TrustManager[] est nul,
les fournisseurs de sécurité installés seront recherchés pour
l'implémentation la plus prioritaire de TrustManagerFactory, à partir de laquelle
un TrustManager approprié sera obtenu. De même, le paramètre
SecureRandom peut être nul, auquel cas une
implémentation par défaut sera utilisée.

Un KeyManager vide ne contient aucun certificat RSA ou DSA. Par conséquent, toutes les suites de chiffrement par défaut qui s’appuieraient sur un tel certificat sont désactivées. C'est pourquoi vous recevez tous ces messages « Ignorer la suite de chiffrement indisponible », qui aboutissent finalement à un message « Aucune suite de chiffrement en commun ».

Si vous souhaitez que votre magasin de clés soit utilisé comme magasin de clés, vous devrez besoin de le charger et d'initialiser un KeyManagerFactory avec :

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

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

} enfin {

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

>

KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory

    .getDefaultAlgorithm());

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

Utilisez kmf.getKeyManagers() comme premier paramètre de SSLContext.init( ).

Pour les deux autres paramètres, puisque vous ne demandez visiblement pas d'authentification par certificat client, vous devrait laisser le gestionnaire de confiance à sa valeur par défaut (null) au lieu de copier/coller un gestionnaire de confiance qui est une cause potentielle de vulnérabilité, et vous pouvez également utiliser la valeur par défaut null SecureRandom.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn