Apache TomcatでSSLv3サポートを無効にするにはどうすればよいですか?


20

TLSv1のみを使用するようにApache Tomcatサーバーを再構成しようとしています。ただし、特定のブラウザーを使用してSSLv3にフォールバックしています。

次の設定で<connector>タグをセットアップします。

<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" />

構成設定が欠落しているか、存在してはならない存在がありますか?


v3の問題は何ですか?v1にはセキュリティの問題があると思いました。
mdpc 14年

8
@mdpc POODLEはSSLv3に影響します。
CoverosGene 14年

2
Tomcatバージョン?JDKバージョン?最近のバージョンでは、sslProtocolはデフォルトでTLSです。
ザビエルルーカス14年

2
rmeisen:回答は、TomcatとJavaのバージョン、およびJSSEとAJPを使用している場合によって異なります。違いはsslProtocols=TLSv1詩と同じくらい微妙ですsslProtocol="TLS"(そのことに注意してsください?)。TomcatとJavaのバージョンを指定すると、狂気からあなたを救います。
ステファンLasiewski 14年

回答:


12

Tomcat 5およびバージョン6のバージョンによっては、SSLEnabled = "true"がリリース中に追加されたために機能しない場合があります。これを通過するには、次を編集するだけです。sslProtocols = TLS To:sslProtocols = "TLSv1、TLSv1.1、TLSv1.2"

奇妙に思えますが、たとえTLSと書かれていても、SSL 3が含まれています。

これにより、Tomcat 5.5.20およびTomcat 6インスタンスで修正されました。-グレッグ

私はあなたがする必要があると信じています:

ボス:

<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.0.38より前の Tomcat 6バージョン以下が適用されます**

TLSv1.1,TLSv1.2Java 6ではなく、Java 7でサポートされていることに注意してください。これらのディレクティブを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


1
FYI、sslEnabledProtocolsTomcatの6上で私たちのために動作しませんでした sslProtocols = "TLSv1,...."
ステファンLasiewski 14年

4

同様の使用例があります。これは、Tomcat 7がTLSv1.2やSSLv3などの以前のSSLプロトコルにフォールバックせずに、厳密にTLSv1.2のみを使用できるようにすることです。

私は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サポートのセットアップが比較的簡単です。

私は多くの組み合わせをテストした多くの参考文献から、最終的にTomcat 7がTLSv1.2のみを受け入れるようにする1を見つけました。触れる必要がある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.Http11AprProtocolopensslを使用しているため、使用しません。基礎となる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

Tomcat起動ログにJAVA_OPTSが表示されていることがわかります。

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は証明書でSe​​rverHelloに応答します。

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リクエストのみに厳密に応答することを証明しています。


非常に素晴らしく、徹底した答えです!称賛!
ジェニーDは、モニカの復職

これJAVA_OPTS=-Djdk.tls.client.protocols="TLSv1.2は必要ないことがわかりました(Tomcat 8.0.29、Java 1.8.0_74)。ここでも言及されていません:wiki.apache.org/tomcat/Security/POODLE
Paul

1

Tomcat 7のドキュメントには、sslEnabledProtocolsおよびsslProtocolオプションがサポートされており、それらの間には重複があることが明記されています:https ://tomcat.apache.org/tomcat-7.0-doc/config/http.html


0

Tomcat 6.0.41では、NIOがこれらの設定を無視しているため、ブロッキングコネクタを使用する必要があります。

http://wiki.apache.org/tomcat/Security/POODLE

http://mail-archives.apache.org/mod_mbox/tomcat-users/201410.mbox/%3C5440F1C6.3040205@apache.org%3E

コネクタ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

Tomcat 5.5では、文書化されていないパラメーターを使用する必要があります

protocols="TLSv1"

このプロトコルバージョンの使用を制限します。


0

server.xmlのJboss 4.0.3 SP1(Tomcat 5.5 with java 1.5)でSSL 3(POODLE)を無効にするには、このようにコードを変更します。

<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" />


0

新しいTomcatの場合は、sslProtocolssslEnabledProtocolsのコンボを次のように使用します。

<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=""/>


0

まず第一に、@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のバージョンが必要です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.