Java 7 et ne Pouvait pas générer la paire de clés DH
J'ai lu un post précédent concernant l'erreur "impossible de générer DH paire de clés' déclenché lorsque le serveur sente une touche enfoncée pendant plus de 1 024 bits. Le téléchargement de la JCE illimité pots devrait corriger ce problème. Dans l'environnement de test que j'ai, j'ai rencontré les suivants, pour le même serveur web, si j'utilise la version 6 de Java je n'ai pas toutes les erreurs lors de l'exécution de la requête https mais si j'utilise Java 7 puis-je obtenir 'n'a pas Pu générer DH paire de clés'.
J'ai essayé de remplacer les fichiers jar pour JCE illimité, mais toujours la même erreur. Le bug est signalé depuis 2007, mais pourquoi est-il exécuter pour Java 6 et pas pour Java 7? Sont les fichiers à télécharger, pas le bon? J'ai reçu le lien d'un post précédent Java: Pourquoi SSL handshake donner "Pourrait ne pas générer de DH paire de clés' exception?.
À ce point, je ne sais pas quoi faire. Si j'essaie de charger le BouncyCastle fournisseur-je obtenir une ArrayOutOfIndex exception. Mon serveur ne permet DH algorithme donc je ne peux pas utiliser un autre algorithme, comme suggéré dans le post ci-dessus.
OriginalL'auteur user1408089 | 2012-05-21
Vous devez vous connecter pour publier un commentaire.
Quelques ajouts ou précisions:
(Suncle) Java 7 depuis 7u09 utilise un plus raisonnable cohérente afin de ciphersuites par défaut, contrairement à l'ordre apparemment aléatoire dans 7u04. (Je n'ai pas de tests entre 04 et 09.) Cette commande met ecdhe n'et la plaine-RSA (aka akRSA) avant de DHE, et évite donc le problème si ET SEULEMENT SI le serveur prend en charge ecdhe n'RSA et s'engage à la préférence du client. (Ou ECDH-fixe, mais pratiquement personne ne l'utilise que.) Si le serveur insiste sur la DHE (pour quelque raison que ce soit) ET utilise DH>1024 bits, vous avez encore le problème.
Si le demandeur (ou quelqu'un d'autre) se connecte à un serveur qui a vraiment besoin d'entier-DH (et pas ECDH ou RSA), le seul moyen de travailler avec Java avant le 8 est d'obtenir le serveur pour une utilisation DH de 1024 bits. Qui AFAWK est techniquement sécurisé pour quelques années de plus, mais avec une marge étroite, il est interdit par les autorités important comme le NIST (voir Spécial Pub 800-57 à csrc.nist.gov). (Même RSA 1024 n'est pas encore levée, mais il sera probablement bientôt et est donc interdite.)
La "force illimitée de la politique" n'est pas pertinent à ce problème, ou du moins pas directement, et les bonnes réponses aux #6851461 n'a pas dit qu'il est. Il ne change pas la restriction de la DH paramètres dans SunJCE, qui est (à tort) est traitée comme une question de la norme pas une question de force. (Plus précisément, il prend les restrictions que l'habitude d'être correct pour les DSA et les applique à la DH.) Elle permet à l'algorithme AES-256 et SHA-2 (uniquement pour TLSv1.2) les suites, et donné suffisamment étrange liste de préférences qui pourraient modifier les résultats sélection de DHE (ne) à la non-DHE (travaux).
Vous n'avez pas besoin d'aller entièrement à la Java 6 liste, vous avez juste besoin de prioriser d'autres échanges de clé sur DHE, ou pour un récalcitrants serveur drop DHE entièrement. Vous devriez certainement PAS revenir en arrière pour permettre à tout à l'EXPORTATION ou à un seul DES suites, sauf si cela est absolument nécessaire pour un héritage serveur; ils n'ont PAS été BLOQUÉ depuis plusieurs années maintenant, et est resté activé par défaut dans 6 bien plus longtemps qu'ils devraient avoir.
OriginalL'auteur dave_thompson_085
Je suis tombé sur le même problème avec SSLScokets et je pense que j'ai identifié la raison de cette régression avec Java 7. La raison vient à les algorithmes de chiffrement négocié entre le client et le serveur.
Par défaut de Java 6 permet à ces algorithmes pour une connexion TLS (par ordre de priorité) :
Et Java 7 permet à ces algorithmes:
Les algorithmes utilisant l'échange de clés Diffie-Hellman venir en priorité plus élevée sur l'île de Java 7, mais ils ne semblent pas à l'appui de clés de plus de 1024 bits, à moins que la forte crypto paquet est installé.
La solution de contournement que j'ai utilisé était de préciser les algorithmes de chiffrement activé par Java 6 sur le
SSLSocket
:Je suis nouveau sur java titres. Où dois-je écrire ce morceau de code?
OriginalL'auteur Emmanuel Bourg
Donné que vous utilisez la dernière version de java edition et l'erreur persiste, vous pouvez modifier un paramètre dans java.la sécurité (par exemple dans le dossier C:\Program Files\Java\jre1.8.0_xx\lib\security
Ajouter DH que les personnes handicapées de l'algorithme dans le jdk.tls.disabledAlgorithms
Redémarrer tomcat ou relancer votre programme.
OriginalL'auteur Tolomir
Nous avons également été en cours d'exécution dans ce problème avec Java7 et Java8.
Nous avons également utilisé une solution similaire à Emanual Borg suggestions.
Mais notre objectif était d'éviter de coder en dur une liste fixe de CipherSuites. Nous avons donc essayé de supprimer les entrées qui a causé le problème (par essais et erreurs...).
Question: est-ce que quelqu'un voit un problème avec cette approche?
Btw: Dans le cas où vous utilisez Apache HTTPClient, puis https://issues.apache.org/jira/browse/HTTPCLIENT-1111 est intéressante, qui montre comment définir la CipherSuites (en commençant par HTTPClient v4.2) par l'intermédiaire de la méthode
Mise à jour 2015/10/31:
Pour aider à mieux comprendre le contexte d'utilisation de cette, ici aussi plein de pseudo-code de l'exemple où vous allez voir comment accrocher pour remplacer le prepareSocket() méthode:
Être prudent
Nous sommes à l'aide de ce morceau de code que dans un contexte où le consentement explicite de l'utilisateur permet à la confiance des certificats auto-signés (par exemple, pour le test-environnements, etc.). Si vous ne voulez pas faire cela, alors mieux ne plaisante pas avec le protocole SSL.
OriginalL'auteur Christoph
Si vous utilisez jdk1.7.0_04, la mise à niveau vers jdk1.7.0_21. Le problème a été corrigé dans la mise à jour.
Malheureusement, j'obtiens toujours cette erreur dans
7u21-2.3.9-1ubuntu1
.J'obtiens toujours cette erreur dans le build 1.7.0_45-b18
Et je le reçois dans
1.7.0_55-b13
.Sen pour moi sur _71
OriginalL'auteur Lekkie