web-dev-qa-db-fra.com

tomcat 7 + ssl ne fonctionne pas - ERR_SSL_VERSION_OR_CIPHER_MISMATCH

Ubuntu 14, Tomcat 7, Java 7

notre.crt, notre.key et Gd_bundle-g2-g1.crt fournis par godaddy. Le paquet contient 3 certificats (vu en consultant le fichier).

Notez que notre clé et notre crt ont été utilisés sur node.js sans problème.

nous avons donc créé un magasin de clés à partir du répertoire existant:

cd /etc/ssl
openssl pkcs12 -export -in our.crt -inkey our.key -out our.p12 -name Tomcat -CAfile Gd_bundle-g2-g1.crt -caname root -chain

Le fichier server.xml est le suivant:

<Server port="8005" shutdown="SHUTDOWN">

<Listener className="org.Apache.catalina.core.JasperListener" />
<Listener className="org.Apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.Apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.Apache.catalina.core.ThreadLocalLeakPreventionListener" />



<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
          type="org.Apache.catalina.UserDatabase"
          description="User database that can be updated and saved"
          factory="org.Apache.catalina.users.MemoryUserDatabaseFactory"
          pathname="conf/Tomcat-users.xml" />
</GlobalNamingResources>


<Service name="Catalina">

<Connector port="80" protocol="HTTP/1.1"
           connectionTimeout="20000"
           URIEncoding="UTF-8"
           redirectPort="8443" />

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
           maxThreads="200" scheme="https" secure="true"
           keystoreType="PKCS12"
           keystoreFile="/etc/ssl/our.p12" keystorePass=""
           clientAuth="false" sslProtocol="TLS" />
  • Tomcat démarre sans erreur.
  • La webapp fonctionne très bien sur le port 80.
  • Le serveur n'a pas de fw en cours d'exécution.

Nous configurons une redirection locale de 443 à 8443:

iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8443

Puis essayez https://www.ourserver.com/ourapp

Chrome donne: ERR_SSL_VERSION_OR_CIPHER_MISMATCH

exemples de curl s'exécutant sur une machine locale:

curl -Iv https://www.ourserver.com:8443
* Rebuilt URL to: https://www.ourserver.com:8443/
* Hostname was NOT found in DNS cache
*   Trying 1xxxxxxxx...
* Connected to www.ourserver.com (1xxxx) port 8443 (#0)
* successfully set certificate verify locations:
*   CAfile: none
  CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS alert, Server hello (2):
* error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
* Closing connection 0
curl: (35) error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure

Des idées?

MISE À JOUR 1

J'ai essayé de configurer un nouveau Tomcat 7 sur un nouveau serveur, et j'ai installé une nouvelle copie des certificats, et j'ai obtenu la même erreur.

14
John Little

Essayez d’ajouter l’attribut ciphers à votre balise de connecteur, comme 

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_ECDHE_RSA_WITH_RC4_128_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,SSL_RSA_WITH_RC4_128_SHA"

Si cela ne vous aide pas, essayez de changer votre attribut de protocole de protocol="HTTP/1.1" à protocol="org.Apache.coyote.http11.Http11Protocol"

Pour plus de référence voir

17
Naman

Récemment, j'ai eu la même erreur lorsque j'essayais de suivre guide Sécurisation de Bitbucket Server avec Tomcat avec SSL quand j'ai trouvé cette solution ici .

Vous devez convertir du pkcs12 au Java keystore au format:

keytool -importkeystore \
        -deststorepass changeit -destkeypass changeit \
        -destkeystore /path/to/my/keystore.jks \
        -srckeystore our.p12 -srcstoretype PKCS12

et dans Tomcat, il suffit de définir:

<Connector ...
          keystoreFile="/path/to/my/keystore.jks" />
3

Essayez de basculer sslProtocol sur "TLSv1, TLSv1.1, TLSv1.2". Vous voudrez peut-être y ajouter SSLv2Hello pour les cas de test openssl/curl, car certaines bibliothèques plus anciennes voudront envoyer l'ancien avant de commencer la négociation.

2
Sean Baker

Ubuntu 14, Tomcat 7, Java 7

Quelles versions exactes de Tomcat et de Java 7?

https://wiki.Apache.org/Tomcat/FAQ/Linux_Unix#Q5

Le fichier server.xml est le suivant:

Vous ne mentionnez pas l'implémentation du connecteur que vous utilisez, mais comme AprLifecycleListener est supprimé de votre server.xml, cela signifie que vous utilisez l'implémentation "Http11Protocol" (ou "BIO"). Bien. Il devrait être visible depuis vos journaux de démarrage. (Si vous aviez utilisé l'implémentation "APR", votre configuration devrait être assez différente).

curl -Iv https://www.ourserver.com/ourapp:8443

Une URL étrange. Le numéro de port doit suivre le nom du serveur, https://www.ourserver.com:8443/ourapp.

Bien que le message "* URL reconstruite à: https://www.ourserver.com:8443/ " de curl semble indiquer qu'il sait comment gérer cela.

erreur: 14077410: routines SSL: SSL23_GET_SERVER_HELLO: échec de la négociation de l'alerte sslv3

Le protocole SSLv3 de Tomcat 7.0.57 et versions ultérieures est désactivé par défaut en raison d'une vulnérabilité SSL publiée (CVE-2014-3566 POODLE). Ce filtrage des protocoles SSL désactive tous les protocoles ayant "SSL" dans leur nom, y compris SSLv2Hello. Apparemment, curl essaie de se connecter ici avec SSLv2Hello ("SSL23" dans son message).

Vous avez besoin d'un client prenant en charge le protocole TLS (TLS 1.0, 1.1 ou 1.2).

https://wiki.Apache.org/Tomcat/Security/POODLE
https://wiki.Apache.org/Tomcat/Security/Ciphers

Essayez de passer sslProtocol à "TLSv1, TLSv1.1, TLSv1.2". Vous voudrez peut-être y ajouter SSLv2Hello pour les scénarios de test openssl/curl, car certaines bibliothèques plus anciennes voudront envoyer le bonjour avant la négociation en amont.

Bon, mais avec une correction: ce qui précède est une valeur pour l'attribut sslEnabledProtocols (pas sslProtocol).

Vous pouvez essayer de vous connecter avec OpenSSL,

openssl s_client -connect hostname:8443

openssl s_client -connect hostname:8443 -tls1

OpenSSL Doc: https://openssl.org/docs/apps/s_client.html

Référence de configuration de Tomcat 7: http://Tomcat.Apache.org/Tomcat-7.0-doc/config/http.html#SSL_Support_-_BIO_and_NIO

1