4.3. SSL/TLS 协议版本

概述

Apache CXF 支持的 SSL/TLS 协议的版本取决于配置的特定 JSSE 供应商。默认情况下,JSSE 提供商配置为 SUN 的 JSSE 提供商实施。

警告

如果启用 SSL/TLS 安全性,您必须确保显式禁用 SSLv3 协议,以便防止 Poodle 漏洞(CVE-2014-3566)。如需了解更多详细信息,请参阅 JBoss Fuse 6.x 和 JBoss A-MQ 6.x 中的禁用 SSLv3

SunJSSE 支持的 SSL/TLS 协议版本

表 4.2 “SUN 的 JSSE Provider 支持的 SSL/TLS 协议” 显示 SUN 的 JSSE 提供商支持的 SSL/TLS 协议版本。

表 4.2. SUN 的 JSSE Provider 支持的 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 端点(除了 SSLv2HelloSSLv3 协议外,在从 Fuse 版本 6.2.0 起,CXF 运行时都特别排除了 Poodle 安全漏洞(CVE-2014-3566))。

要排除特定的 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>
重要

建议您始终排除 SSLv2HelloSSLv3 协议,以防御 Poodle 漏洞(CVE-2014-3566)

secureSocketProtocol 属性

http:tlsClientParameters 元素和 httpj:tlsServerParameters 元素都支持 secureSocketProtocol 属性,它可让您指定特定的协议。

此属性的语义混淆,但是:此属性会强制 CXF 选择一个支持指定协议的 SSL 供应商,但它不限制供应商只使用指定的协议。因此,端点使用不同于指定的协议来结束。因此,建议您不要使用代码中的 secureSocketProtocol 属性。