Подтвердить что ты не робот

Tomcat 7 + ssl не работает - ERR_SSL_VERSION_OR_CIPHER_MISMATCH

Ubuntu 14, tomcat 7, java 7

our.crt, our.key и gd_bundle-g2-g1.crt, предоставленные godaddy. У пакета есть 3 сертификата в нем (как видно из файла vi).

Обратите внимание: наш ключ и crt были использованы на node.js без проблем.

мы создали хранилище ключей из существующего crt:

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

Сервер .xml:

<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 запускает без ошибок.
  • Webapp отлично работает на порту 80.
  • Сервер не работает.

Мы настраиваем локальную переадресацию с 443 на 8443:

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

Затем попробуйте https://www.ourserver.com/ourapp

Chrome предоставляет: ERR_SSL_VERSION_OR_CIPHER_MISMATCH

примеры скручивания, запущенные на локальной машине:

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

Любые идеи?

ОБНОВЛЕНИЕ 1

Я попытался настроить новый tomcat 7 на новом сервере и установил новую копию сертификатов и получил ту же ошибку.

4b9b3361

Ответ 1

Попробуйте добавить атрибут ciphers в тег коннектора, например

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"

Если это не поможет, попробуйте изменить атрибут протокола от protocol="HTTP/1.1" до protocol="org.apache.coyote.http11.Http11Protocol"

Подробнее см.

Ответ 2

Недавно я получил ту же ошибку, когда я пытался следовать руководству Защищать сервер Bitbucket с помощью Tomcat с помощью SSL, когда я нашел это решение здесь.

Вам нужно преобразовать из формата pkcs12 в java keystore:

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

и в Tomcat просто установите:

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

Ответ 3

Попробуйте переключить sslProtocol на "TLSv1, TLSv1.1, TLSv1.2". Возможно, вы захотите добавить SSLv2Hello к сценариям opensl/curl, поскольку некоторые старые библиотеки захотят отправить старый привет перед обсуждением.

Ответ 4

Ubuntu 14, tomcat 7, java 7

Какие точные версии Tomcat и Java 7?

https://wiki.apache.org/tomcat/FAQ/Linux_Unix#Q5

Сервер .xml:

Вы не упоминаете, какую реализацию коннектора используете, но поскольку AprLifecycleListener удаляется из вашего server.xml, это означает, что вы используете реализацию "Http11Protocol" (или "BIO" ). Хорошо. Он должен быть видимым из ваших журналов автозагрузки. (Если вы использовали реализацию "APR", ваша конфигурация была бы совсем другой).

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

Нечетный URL. Номер порта должен следовать за именем сервера, https://www.ourserver.com:8443/ourapp.

Хотя сообщение "* Восстановленный URL-адрес: https://www.ourserver.com:8443/" из curl выглядит так, как будто он знает, как с этим справиться.

error: 14077410: Подпрограммы SSL: SSL23_GET_SERVER_HELLO: отказ от сбоев связи sslv3

Tomcat 7.0.57 и более поздние версии отключили протокол SSLv3 по умолчанию из-за опубликованной уязвимости SSL (CVE-2014-3566 POODLE). Эта фильтрация SSL-протоколов отключает все протоколы, у которых есть "SSL" в их имени, включая SSLv2Hello. По-видимому, curl пытается подключиться к SSLv2Hello рукопожатию здесь ( "SSL23" в своем сообщении).

Вам нужен клиент, поддерживающий протокол TLS (TLS 1.0, 1.1 или 1.2).

https://wiki.apache.org/tomcat/Security/POODLE
https://wiki.apache.org/tomcat/Security/Ciphers

Попробуйте переключить sslProtocol на "TLSv1, TLSv1.1, TLSv1.2". Возможно, вы захотите добавить SSLv2Hello к сценариям opensl/curl, поскольку некоторые старые библиотеки захотят отправить старый привет перед обсуждением.

Хорошо, но с одной поправкой: выше значение для атрибута sslEnabledProtocols (не sslProtocol).

Вы можете попробовать подключиться к OpenSSL,

openssl s_client -connect hostname:8443

openssl s_client -connect hostname:8443 -tls1

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

Tomcat 7 Ссылка на конфигурацию: http://tomcat.apache.org/tomcat-7.0-doc/config/http.html#SSL_Support_-_BIO_and_NIO

Ответ 5

У меня была такая же проблема, и я решил ее.

Пожалуйста, добавьте пароль к вашему хранилищу ключей - и это работает!