Я пытаюсь получить оценку A+ поТестирование сервера SSL @ SSL Labs. Однако я не могу понять, как пройти тест на «предотвращение атак понижения версии»:
Я использую Jetty 9.3.0.v20150612 вместе с OpenJDK 8 на Linux Ubuntu 15.04 (Vivid Vervet).
hristo@test:~$ java -version
openjdk version "1.8.0_45-internal"
OpenJDK Runtime Environment (build 1.8.0_45-internal-b14)
OpenJDK 64-Bit Server VM (build 25.45-b02, mixed mode)
Я прочитал(а) и следовал(а) инструкциямДокументация по конфигурации SSL Jetty, и сделал все возможное, чтобы отредактировать соответствующие файлы конфигурации XML. Независимо от того, что я пытаюсь сделать, я все еще вижу "Нет, TLS_FALLBACK_SCSV не поддерживается".
Я включил модули https
и ssl
для Jetty, выполнив эту команду:
$ java -jar start.jar --add-to-startd=https,ssl
INFO: ssl initialised in ${jetty.base}/start.d/ssl.ini
INFO: https initialised in ${jetty.base}/start.d/https.ini
INFO: Base directory was modified
jetty.xml
Я не модифицировал ваниль jetty-https.xml
, потому что не уверен, что мне нужно там менять. Вот что у меня есть для моих конфигов:
старт.ini
# added this to the bottom of start.ini
# TLS configuration
-Dhttps.protocols="TLSv1,TLSv1.1,TLSv1.2"
-Djdk.tls.client.protocols="TLSv1,TLSv1.1,TLSv1.2"
-Djdk.tls.ephemeralDHKeySize=2048
jetty-ssl-контекст.xml
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
<!-- ============================================================= -->
<!-- SSL ContextFactory configuration -->
<!-- ============================================================= -->
<Configure id="sslContextFactory" class="org.eclipse.jetty.util.ssl.SslContextFactory">
<!-- ===================== -->
<!-- other default configs -->
<!-- ===================== -->
<Set name="IncludeCipherSuites">
<Array type="String">
<Item>TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384</Item>
<Item>TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256</Item>
<Item>TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384</Item>
<Item>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256</Item>
<Item>TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA</Item>
<Item>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA</Item>
<Item>TLS_DHE_RSA_WITH_AES_256_GCM_SHA384</Item>
<Item>TLS_DHE_RSA_WITH_AES_128_GCM_SHA256</Item>
<Item>TLS_DHE_RSA_WITH_AES_256_CBC_SHA</Item>
<Item>TLS_DHE_RSA_WITH_AES_128_CBC_SHA</Item>
<Item>TLS_DHE_RSA_WITH_AES_256_CBC_SHA256</Item>
<Item>TLS_DHE_RSA_WITH_AES_128_CBC_SHA256</Item>
<Item>TLS_RSA_WITH_AES_256_GCM_SHA384</Item>
<Item>TLS_RSA_WITH_AES_128_GCM_SHA256</Item>
<Item>TLS_RSA_WITH_AES_256_CBC_SHA256</Item>
<Item>TLS_RSA_WITH_AES_128_CBC_SHA256</Item>
<Item>TLS_RSA_WITH_AES_256_CBC_SHA</Item>
<Item>TLS_RSA_WITH_AES_128_CBC_SHA</Item>
</Array>
</Set>
<Set name="IncludeProtocols">
<Array type="java.lang.String">
<Item>TLSv1</Item>
<Item>TLSv1.1</Item>
<Item>TLSv1.2</Item>
</Array>
</Set>
<Set name="ExcludeCipherSuites">
<Array type="String">
<Item>SSL.*</Item>
<Item>.*DES.*</Item>
<Item>.*DSS.*</Item>
<Item>.*KRB.*</Item>
<Item>.*MD5.*</Item>
<Item>.*NULL.*</Item>
<Item>.*RC4.*</Item>
</Array>
</Set>
<Set name="ExcludeProtocols">
<Array type="java.lang.String">
<Item>SSL</Item>
<Item>SSLv2</Item>
<Item>SSLv2Hello</Item>
<Item>SSLv3</Item>
</Array>
</Set>
<Set name="renegotiationAllowed" type="boolean">false</Set>
<Set name="useCipherSuitesOrder"><Property name="jetty.sslContext.useCipherSuitesOrder" default="true"/></Set>
</Configure>
Что еще я упускаю? Нужно ли мне еще как-то настроить Jetty? Нужно ли мне как-то настроить Java 8? Нужно ли мне изменить какие-то специальные конфигурации Ubuntu?
решение1
Просто пока что эта возможность не реализована в Java, хотя она запланирована для Java 9.
Вы можете следить#JDK-8061798для получения обновлений.