web-dev-qa-db-fra.com

Erreur de clé publique Diffie-Hellman avec Tomcat 7

J'ai réussi à configurer deux machines Ubuntu avec des certificats Tomcat et SSL. J'ai suivi exactement la même procédure avec Centos 6, mais je l’obtiens lorsque je tente de me connecter au serveur (avec Opera):

Le serveur a une clé publique éphémère Diffie-Hellman faible

Le connecteur est le suivant et il n'y a pas d'erreur dans catalina.log:

<Connector port="some port number"  
           protocol="org.Apache.coyote.http11.Http11Protocol" 
           SSLEnabled="true"
           maxThreads="150" scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS"
           keystoreFile="path to jks"
           keystoreType="JKS"
           keystorePass="mypass1"
           keyPass="mypass2"  /> 

Avec Firefox, j'obtiens l'erreur de communication non fiable.

14
Bob

Pour moi, cela a fonctionné après l'ajout d'une liste de chiffrements autorisés à la configuration de Tomcat dans conf/server.xml pour désactiver les chiffrements faibles Diffie-Hellman:

    <Connector
        ...
        ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA"
        ...
30
centic

Cela est dû au fait que les nouvelles versions de navigateur ont commencé à émettre des avertissements/erreurs lors de l'accès à des sites Web configurés avec des chiffrements DH faibles pour SSL. Pour plus d'informations sur le problème, suivez les liens ci-dessous.

https://weakdh.org

problème de blocage

Pour résoudre ce problème, vous pouvez trouver un moyen de contourner ce problème, côté navigateur ou côté serveur. Le côté serveur est le meilleur car il résoudra le problème pour tous les utilisateurs, s’ils accèdent au serveur à partir de différents navigateurs/emplacements. 

Résoudre le problème, nous devons nous assurer que notre serveur (dans ce cas Tomcat) utilise des algorithmes de chiffrement puissants pour SSL.

Dans Tomcat, il existe deux implémentations différentes de SSL. Defautl est une implémentation JSSE fournie dans le cadre de l'exécution de Java. Autre étant l'implémentation APR, qui utilise le moteur OpenSSL par défaut. 

JSSE dépendant du runtime Java, nous devons d’abord déterminer la version de Java que nous utilisons avec Tomcat. Tomcat 7 prend en charge Java 1.6 à partir de maintenant. Ensuite, nous devons trouver les suites de chiffrement respectives prises en charge par la version Java pertinente de JSSE. Les plus faibles sont ceux qui ont 'DHE', alors choisissez ceux qui ne contiennent pas 'DHE'. Quelques suites plus puissantes pour Java 1.6 JSSE sont répertoriées ci-dessous. 

TLS_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_ECDH_ECDSA_WITH_RC4_128_SHA
TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA
TLS_ECDH_RSA_WITH_RC4_128_SHA
TLS_ECDH_RSA_WITH_AES_128_CBC_SHA
TLS_ECDH_RSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_ECDSA_WITH_RC4_128_SHA
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_RSA_WITH_RC4_128_SHA
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA
TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA
TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA
TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
TLS_ECDH_ECDSA_WITH_NULL_SHA
TLS_ECDH_RSA_WITH_NULL_SHA
TLS_ECDHE_ECDSA_WITH_NULL_SHA
TLS_ECDHE_RSA_WITH_NULL_SHA
...

Compilez une liste de combinaisons de chiffrement fortes et ajoutez-la aux chiffrements de connecteur dans conf/server.xml dans votre Tomcat.

<Connector
...
ciphers="TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_ECDH_ECDSA_WITH_RC4_128_SHA,TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDH_RSA_WITH_RC4_128_SHA,TLS_ECDH_RSA_WITH_AES_128_CBC_SHA,TLS_ECDH_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_RC4_128_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_RC4_128_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDH_ECDSA_WITH_NULL_SHA,TLS_ECDH_RSA_WITH_NULL_SHA,TLS_ECDHE_ECDSA_WITH_NULL_SHA,TLS_ECDHE_RSA_WITH_NULL_SHA"
...
/>

Redémarrez le serveur et l'erreur/l'avertissement devrait disparaître. N'oubliez pas que si la version de Java est différente, copier/coller ci-dessus risque de ne pas fonctionner. Reportez-vous donc à la version correcte et aux suites de chiffrement prises en charge.

Remarque: pour pouvoir utiliser les chiffrements AES 256 bits, il est nécessaire d’installer les fichiers de règles juridictionnelles à force illimitée JCE.

Si Tomcat est configuré pour utiliser APR au lieu de JSSE, la configuration ci-dessus ne fonctionnera pas. Vous pouvez activer des suites de chiffrement robustes en suivant le guide de configuration Tomcat ssl pour APR et logjam admin.

7
kadian

Ajoutez ceci dans le fichier server.xml et redémarrez le serveur 

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
       maxThreads="150" scheme="https" secure="true"
       keystoreFile="keystorePath"
       keystorePass="keystorepass"
       ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA"
       clientAuth="false" sslProtocol="TLS"/>

Essayez de naviguer avec https: // localhost: 8443

2

Cela fonctionne avec Google Chrome version 44 et Merci à Jason Scroggins pour avoir suggéré:

  1. Dans un nouvel onglet, tapez ou collez about:config dans la barre d'adresse et appuyez sur Entrée. Cliquez sur le bouton promettant d'être prudent.
  2. Dans la zone de recherche au-dessus de la liste, tapez ou collez dhe et mettez en pause pendant que la liste est filtrée.
  3. Double-cliquez sur la préférence security.ssl3.dhe_rsa_aes_128_sha pour la passer de true à faux (désactivez l'utilisation par Firefox de ce chiffrement).
  4. Double-cliquez sur la préférence security.ssl3.dhe_rsa_aes_256_sha pour la passer de true à faux (désactivez l'utilisation par Firefox de ce chiffrement).
2
user5312883

Pour moi, c'était le problème de la version de Java utilisée par Tomcat . J'ai changé la version de JDK 6 à JDK 1.7_080 et l'erreur a disparu.

Lorsque j'ai dit que j'avais changé de version Java, je voulais dire que j'avais modifié la variable d'environnement "Java_HOME".

0
Swapnil