2015-04-04 7 views
7

Последние версии Chrome и Firefox отключили SSLv3.0 по умолчанию, из-за POODLE vulnerability. Это приводит к следующей ошибке при попытке открыть сайт я поставил (и который работал отлично):Как исправить «ssl_error_no_cypher_overlap» на сервере Tomcat 7?

С Chrome:

A secure connection cannot be established because this site uses an unsupported protocol. 
Error code: ERR_SSL_VERSION_OR_CIPHER_MISMATCH 

С Firefox:

Cannot communicate securely with peer: no common encryption algorithm(s). (Error code: ssl_error_no_cypher_overlap) 

I исследовали этот вопрос with Chrome, Firefox, Tomcat и more Tomcat docs. Я понимаю проблему, но я не могу найти документацию, чтобы настроить Tomcat 7 на использование только шифров и протоколов TLS, которые теперь безопасны. Я не уверен, что мне нужно создать новую cert/keypair, изменить файл server.xml или установить новую версию Tomcat или что-то еще. Я даже не уверен, какие версии шифрования/протокола теперь считаются «приемлемыми» этими браузерами. Может ли кто-нибудь указать мне на документы или пример для этого?

Я использую OpenJDK 1.7 на Ubuntu 14.04 с Tomcat 7.

Вот мой серт файл (отредактированный):

Keystore type: JKS 
Keystore provider: SUN 

Your keystore contains 1 entry 

Alias name: something 
Creation date: May 4, 2013 
Entry type: PrivateKeyEntry 
Certificate chain length: 1 
Certificate[1]: 
Owner: CN=something, OU=something, O=something, L=something, ST=something, C=something 
Issuer: CN=something, OU=something, O=something, L=something, ST=something, C=something 
Serial number: ... 
Valid from: Sat May 04 17:28:21 MST 2013 until: Tue May 02 17:28:21 MST 2023 
Certificate fingerprints: 
    MD5: ... 
    SHA1: ... 
    SHA256: ... 
    Signature algorithm name: SHA1withDSA 
    Version: 3 

Вот мой server.xml вход для поддержки HTTPS:

<Connector port="8484" protocol="HTTP/1.1" SSLEnabled="true" 
      maxThreads="150" scheme="https" secure="true" 
      keystoreFile="/path/mykeystore" 
      keystorePass="password" 
      clientAuth="false" 
      sslProtocol="TLS" 
      sslEnabledProtocols="TLS" /> 

ответ

0

Вам необходимо расширить sslEnabledProtocols, чтобы включить TLSv1 & ff, в зависимости от вашей версии Java.

Вы указываете шифры с ciphers element of the connector.

Ничего общего с сертификатом.

+1

Благодарим за отзыв - но каковы фактические значения, необходимые для каждого поля? Например, для 'sslEnabledProtocols' я пробовал« TLS »,« TLSv1 »,« TLSv1.1 »,« TLSv1.2 »и« TLSv1.1, TLSv1.2 »без успеха. Я не получаю сообщений об ошибках в журнале Tomcat, но браузер (ы) по-прежнему не подключается. – user3120173

+0

Попробуйте 'sslEnabledProtocols =" TLSv1.2, TLSv1.1, TLSv1 "', как описано в https://wiki.apache.org/tomcat/Security/POODLE –

+0

Я действительно закончил создание нового самозаверяющего сертификата и решил проблема. Я понятия не имею, почему старый перестал работать, но спасибо, я правильно поменяю ваш ответ. – user3120173

12

У меня возникла проблема с новой установкой с использованием Tomcat 8.0.23 и Java 8 build 1.8.0_45. Я, наконец, обнаружил, что мне не удалось указать параметр -keyalg RSA, когда я создал свой самоподписанный сертификат с помощью утилиты Java keytool. Я удалил старое хранилище ключей и включил эту опцию, когда создал новое хранилище ключей. Это поставило проблему.

+1

Спасибо.Я получал эту ошибку в хроме, пока я не добавил флаг RSA, чтобы выглядеть примерно так: keytool -genkey -alias tomcat -keypass localhost -keystore certificates.keystore -storepass localhost -keyalg RSA –

+0

Спасибо @MrZcxfph Ваше исправление позволило мне получить TLS, работая над Fedora 24 + Tomcat 8.0.36 + Java 1.8.0_111 после полудня фрустрации – interoperate

+0

после того, как я пробовал все в Интернете в течение 1 дня, мне это помогло. Также tnx @false_memories для команды примера – Spring

1

Полный Tomcat server.xml Соединительный элемент:

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" 
maxThreads="150" scheme="https" secure="true" 
clientAuth="false" sslProtocol="TLS" keystoreFile="conf/keystore.jks" keystorePass="changeit" 
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" /> 

Это работает для меня, я использую JRE1.7 и сервер Tomcat7 также. Но настройка sslEnabledProtocols не работает для меня, здесь вместо этого используется sslProtocol = «TLS» и явно указывается алгоритм шифрования.

Смежные вопросы