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!