Próbuję ponownie skonfigurować mój serwer Apache Tomcat, aby używał tylko TLSv1. Jednak nadal korzysta z protokołu SSLv3 w niektórych przeglądarkach.
Konfiguruję tag <connector> z następującymi ustawieniami:
<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" />
Czy brakuje mi ustawienia konfiguracji lub mam coś, czego nie powinienem mieć?
ssl
tomcat
configuration
poodle
rmiesen
źródło
źródło
sslProtocols=TLSv1
wersetysslProtocol="TLS"
(zauważ, żes
?). Określenie wersji Tomcat i Java uratuje cię od szaleństwa.Odpowiedzi:
W zależności od wersji Tomcat 5 i wersji 6 SSLEnabled = "true" może nie działać, ponieważ została dodana w połowie wydania. Aby temu zaradzić, po prostu edytuj: sslProtocols = TLS Do: sslProtocols = "TLSv1, TLSv1.1, TLSv1.2"
Wydaje się to dziwne, ale mimo że zawiera TLS, zawiera SSL 3.
To naprawiło to w naszych instancjach Tomcat 5.5.20 i Tomcat 6. -Greg
Uważam, że musisz zrobić:
Jboss:
Nie jestem pewien co do definicji zestawu szyfrów, jednak sslprotocols powinno być ustawione na TLSv1, TLSv1.1, TLSv1.2
w zależności od wersji tomcat będzie się różnić, inne potencjalne rozwiązania:
Tomcat 5 i 6
** W dystrybucjach opartych na RHEL5, poniższe informacje dotyczą wersji Tomcat 6 wcześniejszych niż Tomcat 6.0.38 **
Należy pamiętać, że
TLSv1.1,TLSv1.2
jest obsługiwany przez Java 7, a nie Java 6. Dodanie tych dyrektyw do serwera z Javą 6 jest nieszkodliwe, ale nie włącza TLSv1.1 i TLSv1.2.Tomcat> = 7
Złącza Tomcat APR
powyższe zostało zmienione, aby spełnić wymagania specyfikacji złącza powyżej. Źródło: https://access.redhat.com/solutions/1232233
źródło
sslEnabledProtocols
nie działało dla nas na Tomcat 6. działałosslProtocols = "TLSv1,...."
.Mam podobny przypadek użycia, który pozwala Tomcatowi 7 na ścisłe korzystanie tylko z TLSv1.2, bez powrotu do wcześniejszych protokołów SSL, takich jak TLSv1.1 lub SSLv3.
Używam: C: \ apache-tomcat-7.0.64-64bit i C: \ Java64 \ jdk1.8.0_60.
Postępując zgodnie z tą instrukcją: https://tomcat.apache.org/tomcat-7.0-doc/security-howto.html . Tomcat jest stosunkowo łatwy w konfiguracji obsługi SSL.
Z wielu referencji przetestowałem wiele kombinacji, w końcu znalazłem 1, który zmusi Tomcat 7 do akceptowania tylko TLSv1.2. 2 miejsca potrzebne do dotknięcia:
1) W C: \ apache-tomcat-7.0.64-64bit \ conf \ server.xml
gdzie
keystoreFile
= lokalny sklep zaufania z podpisem własnymorg.apache.coyote.http11.Http11Protocol
= Implementacja JSSE BIO.Nie używamy
org.apache.coyote.http11.Http11AprProtocol
, ponieważ jest zasilany przez openssl. Bazowy openssl wróci do obsługi wcześniejszych protokołów SSL.2) Podczas uruchamiania Tomcat włącz następujące parametry środowiska.
Wymagane jest ograniczenie JAVA_OPTS, w przeciwnym razie Tomcat (oparty na Javie 8) wróci do obsługi wcześniejszych protokołów SSL.
Uruchom Tomcat
C:\apache-tomcat-7.0.64-64bit\bin\startup.bat
Widzimy, że JAVA_OPTS pojawia się w dzienniku uruchamiania Tomcat.
Następnie możemy użyć polecenia openssl, aby zweryfikować naszą konfigurację. Najpierw podłącz localhost: 8443 z protokołem TLSv1.1. Tomcat odmawia odpowiedzi przy użyciu certyfikatu serwera.
Połącz localhost: 8443 z protokołem TLSv1.2, Tomcat odpowiada ServerHello z certyfikatem:
Dowodzi to, że Tomcat teraz ściśle odpowiada tylko na żądanie TLSv1.2.
źródło
JAVA_OPTS=-Djdk.tls.client.protocols="TLSv1.2
nie jest to konieczne (Tomcat 8.0.29, Java 1.8.0_74). Nie wspomniano tu również: wiki.apache.org/tomcat/Security/POODLEDokumentacja Tomcat 7 wyraźnie stwierdza, że opcje
sslEnabledProtocols
isslProtocol
są obsługiwane i że nakładają się na siebie:https://tomcat.apache.org/tomcat-7.0-doc/config/http.html
źródło
W Tomcat 6.0.41 będziesz musiał użyć złącza blokującego, ponieważ NIO ignoruje te ustawienia.
http://wiki.apache.org/tomcat/Security/POODLE
http://mail-archives.apache.org/mod_mbox/tomcat-users/201410.mbox/%[email protected]%3E
Port złącza = protokół „443” = „org.apache.coyote.http11.Http11Protocol” maxThreads = schemat „200” = „https” secure = „true” SSLEnabled = „true” clientAuth = „false”
keystoreFile = „tomcat.jks "keystorePass =" changeit "sslEnabledProtocols =" TLSv1, TLSv1.1, TLSv1.2 "/>
źródło
W Tomcat 5.5 należy użyć nieudokumentowanego parametru
aby ograniczyć użycie dokładnie tej wersji protokołu.
źródło
Aby wyłączyć SSL 3 (POODLE) w Jboss 4.0.3 SP1 (Tomcat 5.5 z java 1.5) w server.xml zmień kod w ten sposób.
<Connector port="443" address="${jboss.bind.address}" maxThreads="100" strategy="ms" maxHttpHeaderSize="8192" emptySessionPath="true" scheme="https" secure="true" clientAuth="false" keystoreFile="${jboss.server.home.dir}/conf/eCP.keystore" keystorePass="password" sslProtocol="TLS" protocols="TLSv1,TLSv1.1,TLSv1.2" />
źródło
w przypadku nowszych Tomcats użyj kombinacji sslProtocols i sslEnabledProtocols w następujący sposób:
<Connector port="8443" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" acceptCount="100" scheme="https" secure="true" clientAuth="false" sslProtocols="TLSv1,TLSv1.1,TLSv1.2" sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2" SSLEnabled="true" URIEncoding="UTF-8" keystorePass=""/>
źródło
Po pierwsze, jak mówi @iviorel, to nie
sslProtocols
jestsslProtocol
. (Dlaczego jego odpowiedź spadła?)JSSE
Dla mnie na Tomcat 7 i Java 7
sslProtocol
w następującej konfiguracji nie działa:To mówi:
Ale następujące działa dobrze:
APR
Aby wyłączyć SSL v3 i włączyć protokół TLSv1:
Aby włączyć protokoły TLSv1, TLSv1.1, TLSv1.2:
Lub:
Uwaga: wartości „TLSv1.1”, „TLSv1.2” wymagają Tomcat Native 1.1.32 i wersji Tomcat, która go obsługuje.
źródło