web-dev-qa-db-fra.com

Comment forcer le serveur Java à n'accepter que les versions 1.2 et à rejeter les connexions 1.0 et 1.1

J'ai un service Web https sous Java 7. Je dois apporter des modifications pour que ce service accepte uniquement la connexion tls1.2 et rejette ssl3, tls1.0 et tls1.1.

J'ai ajouté le paramètre Java suivant pour que tls1.2 soit la priorité la plus élevée.

-Dhttps.protocols=TLSv1.2

mais il accepte également les connexions tls1.0 des clients Java. si le client est également en cours d'exécution avec le paramètre Java ci-dessus, la connexion est tls1.2 mais si le client est en cours d'exécution sans ce paramètre, la connexion est tls1.0.

J'ai joué au fichier Java.security dans le dossier jdk/jre/lib/security.

j'ai actuellement les algorithmes désactivés suivants:

jdk.certpath.disabledAlgorithms= MD2, MD4, MD5, SHA224, DSA, EC keySize < 256, RSA keySize < 2048, SHA1 keysize < 224
jdk.tls.disabledAlgorithms=DSA, DHE, EC keySize < 256, RSA keySize < 2048, SHA1 keysize < 224

J'utilise Java 7, mise à jour 79. Je ne suis pas enclin à intercepter chaque connexion et à vérifier la version de tls.

Mon certificat de serveur est 2048 bits généré avec MD5 avec l'algorithme RSA.

Si la liste des algorithmes désactivés comporte RSA à la place de RSA keySize <2048, j'obtiens SSLHandShakeError avec le message d'erreur correspondant: aucune suite de chiffrement en commun.

Mon programme de test exécute le serveur http à partir de l'URL suivante: http://www.herongyang.com/JDK/HTTPS-HttpsEchoer-Better-HTTPS-Server.html

s'il vous plaît aider à faire en sorte que Java n'accepte que les connexions tls 1.2.

16
PankajSays

J'ai trouvé une solution pour cela. Je mets le 

jdk.tls.disabledAlgorithms= SSLv2Hello, SSLv3, TLSv1, TLSv1.1

dans le fichier jre/lib/security/Java.security sur le serveur.

Après avoir défini cette option, le serveur accepte uniquement la connexion TLS1.2 et rejette les versions de protocole de sécurité inférieures.

23
PankajSays

Juste une petite remarque; 

Dans la question, vous avez indiqué que vous avez généré un certificat de taille 2048 avec MD5. Mais dans le chemin de certification, vous avez désactivé MD5, ce qui ne devrait normalement pas fonctionner. Deuxièmement, les certificats de serveur générés avec un hachage MD5 sont exclus des navigateurs modernes tels qu'Internet Explorer 10/Edge. 

Je vous conseille de générer votre certificat de serveur au moins avec un SHA256 ou <hash. 

2
TyGp

J'ai également apporté les mêmes modifications au fichier "/Java/jdk1.7.0_79/jre/lib/security"-Java.security mais certains clients sont toujours en mesure d'appeler mes services avec le protocole SSL.

---- Changements Jdk.tls.disabledAlgorithms = SSL, SSLv2, SSLv3, TLSv1, TLSv1.1, MD5, SSLv3, DSA, RSA taille de clé <2048

0
Abhimanyu Kumar