web-dev-qa-db-fra.com

Java et SSL - Java.security.NoSuchAlgorithmException

J'ai construit un programme Java comme interface pour une base de données sur un serveur, et j'essaie d'utiliser SSL pour chiffrer le trafic entre les clients et le serveur. Voici la commande que j'ai émise pour créer le certificat de serveur:

keytool -genkey -alias localhost -keyalg RSA -keypass kpass123 -storepass kpass123 -keystore keystore.jks

Voici le code pertinent:

System.setProperty("javax.net.ssl.keyStore",
                   "G:/Data/Android_Project/keystore.jks");

System.setProperty("javax.net.ssl.keyPassword", "kpass123");

SSLServerSocketFactory factory = 
    (SSLServerSocketFactory)SSLServerSocketFactory.getDefault();

SSLServerSocket accessSocket = 
    (SSLServerSocket)factory.createServerSocket(DB_ACCESS_PORT);

Quand j'essaye d'exécuter ceci, j'attrape ceci:

Java.security.NoSuchAlgorithmException: erreur lors de la construction de l'implémentation (algorithme: par défaut, fournisseur: SunJSSE, classe: com.Sun.net.ssl.internal.ssl.DefaultSSLContextImpl)

J'ai également constaté que le service "KeyPairGenerator" dispose d'algorithmes DIFFIEHELLMAN, DSA, RSA, tandis que "SSLContext" dispose d'algorithmes SSL, TLS, SSLV3, DEFAULT, TLSV1.

Dois-je trouver un moyen d'installer RSA dans le service SSLContext? Suis-je même à la recherche des bons services? Dois-je ne pas utiliser RSA?

Je suis novice dans le domaine SSL - Sécurité - Certificats, et cela m'époustoufle que chacun de ces différents services n'a pas les mêmes algorithmes lorsqu'ils sont censés accéder aux mêmes certificats.

33
Zarjio

Essayez javax.net.ssl.keyStorePassword au lieu de javax.net.ssl.keyPassword: ce dernier n'est pas mentionné dans le JSSE ref guide .

Les algorithmes que vous mentionnez devraient être là par défaut en utilisant les fournisseurs de sécurité par défaut. NoSuchAlgorithmExceptions sont souvent causés par d'autres exceptions sous-jacentes (fichier introuvable, mauvais mot de passe, mauvais type de fichier de clés, ...). Il est utile de regarder la trace complète de la pile.

Vous pouvez également utiliser -Djavax.net.debug=ssl, ou au moins -Djavax.net.debug=ssl,keymanager, pour obtenir plus d'informations de débogage, si les informations de la trace de pile ne sont pas suffisantes.

61
Bruno