Как я отключаю поддержку SSLv3 в Tomcat Apache?

Я пытаюсь реконфигурировать свой сервер Tomcat Apache, чтобы только использовать TLSv1. Однако это все еще отступает к SSLv3 с помощью определенных браузеров.

Я устанавливаю <коннектор> тег со следующими настройками:

<Connector ...
       enableLookups="true" disableUploadTimeout="true"
       acceptCount="100"  maxThreads="200"
       scheme="https" secure="true" SSLEnabled="true"
       clientAuth="false" sslProtocol="TLS" ciphers="TLS_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA" sslEnabledProtocols="TLSv1" />

Я пропускаю параметр конфигурации или имею что-то существующее, которое я не должен иметь существующий?

20
задан 17 October 2014 в 00:20
8 ответов

В зависимости от версии Tomcat 5 и В версии 6 SSLEnabled = "true" может не работать, так как он был добавлен в середине выпуска. Чтобы обойти это, вам просто нужно отредактировать следующее: sslProtocols = TLS Кому: sslProtocols = "TLSv1, TLSv1.1, TLSv1.2 "

Кажется странным, но даже несмотря на то, что там написано TLS, он содержит SSL 3.

Это исправило его на нашем Tomcat 5.5.20 и наших экземплярах Tomcat 6. -Greg

Я считаю, что вам нужно сделать следующее:

Jboss:

<Connector protocol="HTTP/1.1" SSLEnabled="true" 
       enableLookups="true" disableUploadTimeout="true"
       acceptCount="100"  maxThreads="200"
       scheme="https" secure="true" clientAuth="false" 
       keystoreFile="${jboss.server.home.dir}/conf/keystore.jks"
       keystorePass="rmi+ssl"
       sslProtocols = "TLSv1,TLSv1.1,TLSv1.2" />

Не уверен в определении набора шифров, однако sslprotocols следует просто установить на TLSv1, TLSv1.1, TLSv1.2

в зависимости от версии Tomcat он будет отличаться, другие возможные решения:

Tomcat 5 и 6

<Connector...
   enableLookups="true" disableUploadTimeout="true"
   acceptCount="100"  maxThreads="200" SSLEnabled="true" scheme="https" secure="true"
   clientAuth="false" sslEnabledProtocols = "TLSv1,TLSv1.1,TLSv1.2" />

** В дистрибутивах на основе RHEL5 следующее применимо к версиям Tomcat 6 до Tomcat 6.0.38 **

Обратите внимание, что TLSv1.1, TLSv1.2 поддерживается Java 7, а не Java 6. Добавление этих директив на сервер, на котором работает Java 6, безвредно, но не активирует TLSv1. 1 & TLSv1.2.

<Connector...
   enableLookups="true" disableUploadTimeout="true"
   acceptCount="100"  maxThreads="200" SSLEnabled="true" scheme="https" secure="true"
   clientAuth="false" sslProtocols = "TLSv1,TLSv1.1,TLSv1.2" />

Tomcat> = 7

<Connector...
       enableLookups="true" disableUploadTimeout="true"
       acceptCount="100"  maxThreads="200" SSLEnabled="true" scheme="https" secure="true"
       clientAuth="false" sslProtocols = "TLSv1,TLSv1.1,TLSv1.2" />

Коннекторы Tomcat APR

<Connector...
               maxThreads="200"
               enableLookups="true" disableUploadTimeout="true"
               acceptCount="100" scheme="https" secure="true"
               SSLEnabled="true" 
               SSLProtocol="TLSv1"
               SSLCertificateFile="${catalina.base}/conf/localhost.crt"
               SSLCertificateKeyFile="${catalina.base}/conf/localhost.key" />

вышеизложенное изменено в соответствии с указанными выше спецификациями коннектора. Источник: https://access.redhat.com/solutions/1232233

12
ответ дан 2 December 2019 в 20:12

В Tomcat 6.0.41 вам потребуется использовать соединитель блокировки поскольку NIO игнорирует эти (скрытые) port = "443" protocol = "org.apache.coyote.http11.Http11Protocol" maxThreads = "200" scheme = "https" secure = "true" SSLEnabled = "true" clientAuth = "false"
keystoreFile = "tomcat.jks" keystorePass = "changeit" sslEnabledProtocols = "TLSv1, TLSv1.1, TLSv1.2" />

0
ответ дан 2 December 2019 в 20:12

В Tomcat 5.5 вы должны использовать недокументированный параметр

protocols="TLSv1"

, чтобы ограничить использование только этой версии протокола.

0
ответ дан 2 December 2019 в 20:12

Чтобы отключить SSL 3 (POODLE) в Jboss 4.0.3 SP1 (Tomcat 5.5 с java 1.5) в server.xml, измените свой код следующим образом.

0
ответ дан 2 December 2019 в 20:12

для новых Tomcats используйте комбинацию sslProtocols и sslEnabledProtocols следующим образом:

sslProtocols = "TLSv1, TLSv1.1, TLSv1.2" sslEnabledProtocols = "TLSv1, TLSv1.1, TLSv1.2" SSLEnabled = "истина" URIEncoding = "UTF-8" keystorePass = "" />

0
ответ дан 2 December 2019 в 20:12

У меня есть аналогичный вариант использования, который должен позволить Tomcat 7 строго использовать только TLSv1.2, чтобы не возвращаться к более ранним протоколам SSL, таким как TLSv1.1 или SSLv3.

Я использую: C: \ apache-tomcat-7.0.64-64bit и C: \ Java64 \ jdk1.8.0_60.

Следуя этой инструкции: https://tomcat.apache.org/tomcat-7.0 -doc / security-howto.html . Tomcat относительно прост в настройке поддержки SSL.

Из многих источников я тестировал много комбинаций, наконец, я нашел 1, который заставит Tomcat 7 принимать только TLSv1.2. Необходимо коснуться 2 мест:

1) В C: \ apache-tomcat-7.0.64-64bit \ conf \ server.xml

<Connector port="8443" 
 protocol="org.apache.coyote.http11.Http11Protocol"
 maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
 keystoreFile="ssl/.keystore" keystorePass="changeit"
 clientAuth="false" sslProtocol="SSL" sslEnabledProtocols="TLSv1.2" />

, где

keystoreFile = локальное самозаверяющее хранилище доверенных сертификатов

org.apache.coyote.http11.Http11Protocol = реализация JSSE BIO.

Мы не используем org.apache.coyote.http11.Http11AprProtocol , потому что он основан на openssl. Базовый openssl вернется к поддержке более ранних протоколов SSL.

2) При запуске Tomcat включите следующие параметры среды.

set JAVA_HOME=C:\Java64\jdk1.8.0_60
set PATH=%PATH%;C:\Java64\jdk1.8.0_60\bin
set CATALINA_HOME=C:\apache-tomcat-7.0.64-64bit
set JAVA_OPTS=-Djdk.tls.client.protocols="TLSv1.2" -Dsun.security.ssl.allowUnsafeRenegotiation=false -Dhttps.protocols="TLSv1.2"

Требуется ограничение JAVA_OPTS, в противном случае Tomcat (который работает на Java8) вернется к поддержке более ранние протоколы SSL.

Запустите Tomcat C: \ apache-tomcat-7.0.64-64bit \ bin \ startup.bat

Мы видим, что JAVA_OPTS появляется в журнале запуска Tomcat.

Oct 16, 2015 4:10:17 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djdk.tls.client.protocols=TLSv1.2
Oct 16, 2015 4:10:17 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dsun.security.ssl.allowUnsafeRenegotiation=false
Oct 16, 2015 4:10:17 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dhttps.protocols=TLSv1.2

Затем мы можно использовать команду openssl для проверки нашей настройки. Сначала подключите localhost: 8443 с протоколом TLSv1.1. Tomcat отказывается отвечать сертификатом сервера.

C:\OpenSSL-Win32\bin>openssl s_client -connect localhost:8443 -tls1_1
Loading 'screen' into random state - done
CONNECTED(000001C0)
5372:error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number:.\ssl\s3_pkt.c:362:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 5 bytes and written 0 bytes

Подключите localhost: 8443 с протоколом TLSv1.2, Tomcat отвечает ServerHello сертификатом:

C:\OpenSSL-Win32\bin>openssl s_client -connect localhost:8443 -tls1_2
Loading 'screen' into random state - done
CONNECTED(000001C0)
depth=1 C = US, ST = Washington, L = Seattle, O = getaCert - www.getacert.com
verify error:num=19:self signed certificate in certificate chain
---
Certificate chain
0 s:/C=SG/ST=SG/L=Singapore/O=Xxxx/OU=Development/CN=Myself
   i:/C=US/ST=Washington/L=Seattle/O=getaCert - www.getacert.com
1 s:/C=US/ST=Washington/L=Seattle/O=getaCert - www.getacert.com
   i:/C=US/ST=Washington/L=Seattle/O=getaCert - www.getacert.com
---
Server certificate
-----BEGIN CERTIFICATE-----
(ignored)
-----END CERTIFICATE-----
subject=/C=SG/ST=SG/L=Singapore/O=Xxxx/OU=Development/CN=Myself
issuer=/C=US/ST=Washington/L=Seattle/O=getaCert - www.getacert.com
---
No client certificate CA names sent
Peer signing digest: SHA512
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 2367 bytes and written 443 bytes

Это доказывает, что Tomcat теперь строго отвечает только на запрос TLSv1.2.

4
ответ дан 2 December 2019 в 20:12

Прежде всего, как говорит @iviorel, это не sslProtocols , это sslProtocol . (Почему его ответ упал?)

JSSE
Для меня, на Tomcat 7 и Java 7, sslProtocol в следующей конфигурации не работает:

<Connector SSLEnabled="true" clientAuth="false" 
keyAlias="keyalias" keystoreFile="keystore" keystorePass="changeit" 
maxThreads="150" port="443" protocol="org.apache.coyote.http11.Http11Protocol" 
scheme="https" secure="true" sslProtocol="TLSv1,TLSv1.1,TLSv1.2" />

Он говорит:

SEVERE: Failed to initialize end point associated with ProtocolHandler ["http-bio-443"]
java.io.IOException: TLSv1,TLSv1.1,TLSv1.2 SSLContext not available
    at org.apache.tomcat.util.net.jsse.JSSESocketFactory.init(JSSESocketFactory.java:465)
    at org.apache.tomcat.util.net.jsse.JSSESocketFactory.createSocket(JSSESocketFactory.java:187)
    at org.apache.tomcat.util.net.JIoEndpoint.bind(JIoEndpoint.java:398)
    at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:646)
    ...
Caused by: java.security.NoSuchAlgorithmException: TLSv1,TLSv1.1,TLSv1.2 SSLContext not available
    at sun.security.jca.GetInstance.getInstance(GetInstance.java:159)
    at javax.net.ssl.SSLContext.getInstance(SSLContext.java:156)
    at org.apache.tomcat.util.net.jsse.JSSESocketFactory.createSSLContext(JSSESocketFactory.java:478)
    at org.apache.tomcat.util.net.jsse.JSSESocketFactory.init(JSSESocketFactory.java:439)
    ... 19 more

Но следующее работает нормально:

<Connector SSLEnabled="true" clientAuth="false" 
keyAlias="keyalias" keystoreFile="keystore" keystorePass="changeit" 
maxThreads="150" port="443" protocol="org.apache.coyote.http11.Http11Protocol" 
scheme="https" secure="true" sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2" />

APR
Чтобы отключить SSL v3 и включить протокол TLSv1:

SSLProtocol="TLSv1"

Чтобы включить протоколы TLSv1, TLSv1.1, TLSv1.2:

SSLProtocol="TLSv1+TLSv1.1+TLSv1.2"

Или:

SSLProtocol="all"

Примечание. : для значений «TLSv1.1», «TLSv1.2» требуется Tomcat Native 1.1.32 и версия Tomcat, которая его поддерживает.

0
ответ дан 2 December 2019 в 20:12

Документация Tomcat 7 четко заявляет, что параметры sslEnabledProtocols и sslProtocol поддерживаются и что между ними существует перекрытие:
https://tomcat.apache.org/tomcat-7.0-doc/config /http.html[12123 impression

1
ответ дан 2 December 2019 в 20:12

Теги

Похожие вопросы