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 供应商支持的 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
协议除外,自 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>
建议您始终排除 SSLv2Hello
和 SSLv3
协议,以防止 Poodle 漏洞(CVE-2014-3566)。
secureSocketProtocol attribute
http:tlsClientParameters
元素和 httpj:tlsServerParameters
元素都支持 secureSocketProtocol
属性,它允许您指定特定的协议。
此属性的语义比较混淆,但此属性强制 CXF 选择支持指定协议的 SSL 供应商,但它不限制供应商只使用指定的协议。因此,端点最终可能会使用与指定不同的协议。因此,建议您不要在代码中使用 secureSocketProtocol
属性。