Tomcat または JBoss Web で SSLv3 および SSLv2 を無効にする

Solution In Progress - Updated -

Environment

  • Red Hat Enterprise Linux 5, 6, 7
  • Red Hat Certificate System 8
  • Red Hat JBoss Enterprise Application Platform (EAP) 4, 5, 6
  • Red Hat JBoss Enterprise Web Platform (EWP) 5
  • Red Hat Network Satellite 5
  • JBoss Enterprise Web Server (EWS) 1, 2
  • Red Hat JBoss Data Grid (JDG) 6
  • Red Hat JBoss Data Virtualization (JDV) 6
  • Red Hat JBoss BRMS Platform (BRMS-P) 5, 6
  • Red Hat JBoss BPM Suite (BPMS) 6
  • Red Hat JBoss SOA Platform (SOA-P) 4, 5
  • Red Hat JBoss Fuse Service Works (FSW) 6
  • Red Hat JBoss Operations Network (JON) 3
  • Red Hat JBoss Portal Platform (JPP) 5, 6

Issue

  • 安全性が低い暗号化方法を無効にし、TLS だけを使用する方法は?
  • CVE-2014-3566 の影響を Tomcat または JBoss Enterprise Middleware システムが受けないようにするには?
  • Tomcat および JBoss Web における POODLE SSLv3 脆弱性問題の解決方法 (CVE-2014-3566) は?

Resolution

SSL を無効にし、TLSv1.1 または TLSv1.2 だけを使用することを Red Hat は推奨します。後方互換性は、TLSv1.0 を使用すると実行できます。Red Hat がサポートする多くの製品には SSLv2 または SSLv3 プロトコルを使用する機能がありますが、使用しないことを強く推奨します。

EAP 4/5 および JBoss 4.x/5.x 製品の JBoss Web

注意: 以下の軽減手順は、HTTPS 設定に JSSE コネクターを使用している場合に限り適用できます。ネイティブコネクターを使用している場合は、Tomcat APR セクションを参照してください。

EAP 4/5 と、EAP 4/5 をベースにした JBoss 4.x/5.x 製品の場合は、SSLv2 および SSLv3 を無効にできます。これは、HTTPS コネクターの $JBOSS_HOME/jboss-as/server/$JBOSS_PROFILE/deploy/jbossweb.sar/server.xml にある <Connector> 設定で sslProtocols 属性を "TLSv1,TLSv1.1,TLSv1.2" に設定すると行えます。たとえば、以下のようになります。

      <Connector protocol="HTTP/1.1" SSLEnabled="true" 
           port="8443" address="${jboss.bind.address}"
           scheme="https" secure="true" clientAuth="false" 
           keystoreFile="${jboss.server.home.dir}/conf/keystore.jks"
           keystorePass="rmi+ssl"
           sslProtocols = "TLSv1,TLSv1.1,TLSv1.2" />

sslProtocols 属性は、使用する SSL プロトコルのバージョンを指定します。この属性を指定しない場合は、"TLS" がデフォルトになります。TLSv1.2 は、JDK 7 以降を使用している場合に限り利用できます。詳細については、http://docs.jboss.org/jbossweb/2.1.x/config/http.html を参照してください。こちらの設定は、JBossWeb 7.x より以前のバージョンにのみ適用されます。7.x 以降では、 コネクターは以下の EAP 6 セクションで説明するとおり protocol 属性をサポートします。詳細については、http://docs.jboss.org/jbossweb/7.0.x/config/ssl.html を参照してください。

EAP 6 および JBoss 6.x 製品の JBoss Web

注意: 以下の軽減手順は、HTTPS 設定に JSSE コネクターを使用している場合に限り適用できます。ネイティブコネクターを使用している場合は、Tomcat APR セクションを参照してください。

EAP 6 と、EAP 6 をベースにした JBoss 6.x 製品については、web サブシステムで HTTPS コネクターのプロトコル属性を "TLSv1,TLSv1.1,TLSv1.2" に設定すると、SSLv2 および SSLv3 を無効にできます。以下の CLI コマンドで、これを実行できます。
Standalone モードの場合:

/subsystem=web/connector=HTTPS/ssl=configuration/:write-attribute(name=protocol,value="TLSv1,TLSv1.1,TLSv1.2")
:reload

Domain モードの場合:

/profile=default/subsystem=web/connector=HTTPS/ssl=configuration/:write-attribute(name=protocol,value="TLSv1,TLSv1.1,TLSv1.2")
:reload

もしくは、設定ファイルを手動で編集できます。

Standalone モードの場合: $JBOSS_HOME/standalone/configuration/$JBOSS_PROFILE.xml
Domain モードの場合: $JBOSS_HOME/domain/configuration/$JBOSS_PROFILE.xml

設定ファイルで以下の要素を検索して編集します。以下の例で、プロトコル属性は "TLSv1,TLSv1.1,TLSv1.2" に設定されます。

            <connector name="https" protocol="HTTP/1.1" scheme="https" socket-binding="https" enable-lookups="false" secure="true">
                <ssl name="https" key-alias="KEY_ALIAS" password="SECRET" certificate-key-file="${jboss.server.config.dir}/keystore.jks" protocol="TLSv1,TLSv1.1,TLSv1.2"/>
            </connector>

プロトコル属性は、使用する SSL プロトコルのバージョンを指定します。サポートされる値は、SSLv2SSLv3TLSv1SSLv2+SSLv3、および ALL です。デフォルトは ALL になります。詳細については、EAP 6 Administration and Configuration Guide を参照してください。

EAP 6 管理インターフェイス

HTTPS 管理インターフェイスを公開している EAP 6 ユーザーは、security-realm/server-identities/ssl 設定パラメーターが公開している現在の設定オプションからは SSLv3 を無効にできません。SSLv3 を無効にできるようにするための Bugzilla が作成されました。以下の手順に実行すると、HTTPS 管理インターフェイスを公開している EAP 6 システムにおけるこの問題を軽減できます。

  • TLSv1 への ssl 設定で、protocol 属性を明示的に設定します。
                <server-identities>
                    <ssl protocol="TLSv1">
                        <keystore path="https.keystore" relative-to="keystore.home" keystore-password="secret" alias="https" key-password="secret" />
                    </ssl>

Tomcat

Tomcat で JSSE コネクターを使用している場合は、使用される SSL プロトコルを $TOMCAT_HOME/conf/server.xml から設定できます。以下の例では、https コネクターで SSLProtocol を設定する方法について示しています。

Tomcat 5 および 6 (6.0.38 より前):

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="false" sslProtocols = "TLSv1,TLSv1.1,TLSv1.2" />

Tomcat 6 (6.0.38 以降) and 7:

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="false" sslEnabledProtocols = "TLSv1,TLSv1.1,TLSv1.2" />

sslEnabledProtocols または sslProtocols 属性を指定する場合は、SSL 実装の一覧に挙げられ、サポートされるプロトコルだけが有効になります。指定しない場合は、デフォルトの JVM だけが使用されます。SSLContext インスタンス (Oracle Java 6や Oracle Java 7 など) を作成する場合にアルゴリズムで利用できる値については、JVM ドキュメントを参照してください。

補足: RHEL 5 に rpm パッケージとして同梱される Tomcat は 5.0.23 ベース、RHEL 6 に rpm パッケージとして同梱される Tomcat は 6.0.24 ベース、RHEL 7 に rpm パッケージとして同梱される Tomcat は 7.0.42 ベースとなっております。

Tomcat APR

Tomcat で APR/ネイティブコネクターを使用している場合は、使用される SSL プロトコルを $TOMCAT_HOME/conf/server.xml から設定できます。以下の例では、HTTPS コネクターで SSLProtocol 属性を設定する方法について示しています。

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

設定パラメーターについては、こちらを参照してください。SSLProtocol 属性は、デフォルトでは ALL に設定されますが、SSLv2SSLv3TLSv1、および SSLv2+SSLv3 を設定することもできます。バージョン 1.1.21 以降の Tomcat ネイティブライブラリでは、3 つのプロトコルを + 記号でつなげた設定がサポートされます。ただし、プロトコル SSLv2 は、基本的に安全ではないことに注意してください。

Root Cause

SSLv3 は、後継の Transport Socket Layer (TLS) と比べて安全性が低くなります。セキュリティ上の観点から、SSL シリーズを無効にし、TLS だけを使用することが推奨されます。

SSLv3.0 プロトコルで脆弱性が報告されました。中間者となる攻撃者は、この脆弱性を利用して、padding oracle side-channel 攻撃を行うことで暗号文を解読できます。この脆弱性の詳細については、POODLE: SSLv3.0 脆弱性 (CVE-2014-3566) を参照してください。

Diagnostic Steps

診断手順については、POODLE: SSLv3.0 脆弱性 (CVE-2014-3566) を参照してください。

This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.

Close

Welcome! Check out the Getting Started with Red Hat page for quick tours and guides for common tasks.