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 プロトコルバージョンを示しています。
プロトコル | 説明 |
---|---|
| 使用しないでください !(POODLE セキュリティー脆弱性) |
| 使用しないでください !(POODLE セキュリティー脆弱性) |
| TLS バージョン 1 をサポートします。 |
| TLS バージョン 1.1 (JDK 7 以降) をサポートします。 |
| 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
属性を 使用しない ことが推奨されます。