Menu Close

4.3. SSL/TLS プロトコルのバージョン

概要

Apache CXF がサポートする SSL/TLS プロトコルのバージョンは、設定されている特定の JSSE プロバイダー によって異なります。デフォルトでは、JSSE プロバイダーが SUN の JSSE プロバイダー実装として設定されます。

警告

SSL/TLS セキュリティーを有効にする場合、Poodle の脆弱性 (CVE-2014-3566) から保護するために、SSLv3 プロトコルを明示的に無効にする必要があります。詳細は、「Disabling SSLv3 in JBoss Fuse 6.x and JBoss A-MQ 6.x」を参照してください。

SunJSSE でサポートされる SSL/TLS プロトコルバージョン

表4.2「SUN の JSSE プロバイダーによりサポートされる SSL/TLS プロトコル」 は、SUN の JSSE プロバイダーでサポートされる SSL/TLS プロトコルバージョンを示しています。

表4.2 SUN の JSSE プロバイダーによりサポートされる SSL/TLS プロトコル

プロトコル説明

SSLv2Hello

使用しないでください。(POODLE セキュリティー脆弱性)

SSLv3

使用しないでください。(POODLE セキュリティー脆弱性)

TLSv1

TLS バージョン 1 のサポート

TLSv1.1

TLS バージョン 1.1 (JDK 7 以降) のサポート

TLSv1.2

TLS バージョン 1.2 (JDK 7 以降) のサポート

特定の SSL/TLS プロトコルバージョンの除外

デフォルトでは、JSSE プロバイダーによって提供される SSL/TLS プロトコルはすべて、CXF エンドポイントで利用できます (ただし、SSLv2Hello および SSLv3 プロトコルは除きます。これらは、Poodle の脆弱性 (CVE-2014-3566) が原因で、Fuse バージョン 6.2.0 以降、CXF ラインタイムによって明確に除外されています)。

特定の SSL/TLS プロトコルを除外するには、エンドポイント設定で sec:excludeProtocols 要素を使用します。sec:excludeProtocols 要素を httpj:tlsServerParameters 要素の子として設定できます (サーバー側)。

TLS バージョン 1.2 以外のすべてのプロトコルを除外するには、以下のように sec:excludeProtocols 要素を設定します (JDK 7 以降を使用していることを前提とします)。

<?xml version="1.0" encoding="UTF-8"?>
<beans ... >
  ...
  <httpj:engine-factory bus="cxf">
    <httpj:engine port="9001">
      ...
      <httpj:tlsServerParameters>
        ...
        <sec:excludeProtocols>
          <sec:excludeProtocol>SSLv2Hello</sec:excludeProtocol>
          <sec:excludeProtocol>SSLv3</sec:excludeProtocol>
          <sec:excludeProtocol>TLSv1</sec:excludeProtocol>
          <sec:excludeProtocol>TLSv1.1</sec:excludeProtocol>
        </sec:excludeProtocols>
      </httpj:tlsServerParameters>
    </httpj:engine>
  </httpj:engine-factory>
  ...
</beans>
重要

Poodle の脆弱性 (CVE-2014-3566) から保護するには、常に SSLv2Hello および SSLv3 プロトコルを除外することを推奨します。

secureSocketProtocol 属性

http:tlsClientParameters 要素と httpj:tlsServerParameters 要素の両方が secureSocketProtocol 属性をサポートし、これにより特定のプロトコルを指定できます。

ただし、この属性のセマンティクスは混乱を招きます。この属性は、指定されたプロトコルをサポートする SSL プロバイダーを選択するよう CXF に強制しますが、指定されたプロトコルのみを使用するようプロバイダーを制限することはしません。したがって、エンドポイントは、指定されたものとは異なるプロトコルを使用する可能性があります。このため、コードで secureSocketProtocol 属性を 使用しない ことが推奨されます。