4.2. 密码套件过滤器
概述
在典型的应用程序中,您通常希望将可用密码套件列表限制为 JSSE 供应商支持的密码子集。
通常,您应该使用 sec:cipherSuitesFilter
元素而不是 sec:cipherSuites
元素来选择要使用的密码套件。
不建议使用 sec:cipherSuites
元素,因为它具有非直观的语义:您可以使用它来要求加载的安全供应商至少支持列出的密码套件。但是,加载的安全供应商可能会支持比指定的更多的密码套件。因此,当您使用 sec:cipherSuites
元素时,它并不清楚在运行时支持哪些密码套件。
命名空间
表 4.1 “用于配置 Cipher Suite Filters 的命名空间” 显示本节中引用的 XML 命名空间:
prefix | 命名空间 URI |
---|---|
| |
| |
|
sec:cipherSuitesFilter 元素
您可以使用 sec:cipherSuitesFilter
元素来定义密码套件过滤器,它可以是 http:tlsClientParameters
元素或 httpj:tlsServerParameters
元素的子项。一个典型的 sec:cipherSuitesFilter
元素,例 4.1 “sec:cipherSuitesFilter 元素的结构” 中显示的概要结构。
例 4.1. sec:cipherSuitesFilter 元素的结构
<sec:cipherSuitesFilter> <sec:include>RegularExpression</sec:include> <sec:include>RegularExpression</sec:include> ... <sec:exclude>RegularExpression</sec:exclude> <sec:exclude>RegularExpression</sec:exclude> ... </sec:cipherSuitesFilter>
语义
以下语义规则适用于 sec:cipherSuitesFilter
元素:
如果一个
sec:cipherSuitesFilter
元素 没有出现在 端点的配置中(也就是说,它没有来自相关http:conduit
或httpj:engine-factory
元素),则会使用以下默认过滤器:<sec:cipherSuitesFilter> <sec:include>.*_EXPORT_.*</sec:include> <sec:include>.*_EXPORT1024.*</sec:include> <sec:include>.*_DES_.*</sec:include> <sec:include>.*_WITH_NULL_.*</sec:include> </sec:cipherSuitesFilter>
-
如果
sec:cipherSuitesFilter
元素出现在端点的配置中,则默认 排除 所有密码套件。 -
要包括密码套件,请将
sec:include
子元素添加到sec:cipherSuitesFilter
元素。sec:include
元素的内容是匹配一个或多个密码套件名称的正则表达式(例如,请查看 “SunJSSE 支持的密码套件”一节中的密码套件名称)。 要进一步重新定义所选密码套件,您可以在
sec:cipherSuitesFilter
元素中添加sec:exclude
元素。sec:exclude
元素的内容是一个正则表达式,与当前包含的集合中的零个或多个密码套件名称匹配。注意有时,明确排除当前未包含的密码套件是合理的,以便防止意外包含不需要的密码套件。
正则表达式匹配
出现在 sec:include
和 sec:exclude
元素的正则表达式的 grammar 由 Java 正则表达式实用程序定义,java.util.regex.Pattern
。有关marmar的详细描述,请参阅 Java 参考指南 http://download.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html。
client conduit 示例
以下 XML 配置显示了将密码套件过滤器应用到远程端点( {
WSDLPortNamespace}
PortName )的客户端示例。每当客户端尝试打开此端点的 SSL/TLS 连接时,它会将可用的密码套件限制为 sec:cipherSuitesFilter
元素选择的密码套件。
<beans ... > <http:conduit name="{WSDLPortNamespace}PortName.http-conduit"> <http:tlsClientParameters> ... <sec:cipherSuitesFilter> <sec:include>.*_WITH_3DES_.*</sec:include> <sec:include>.*_WITH_DES_.*</sec:include> <sec:exclude>.*_WITH_NULL_.*</sec:exclude> <sec:exclude>.*_DH_anon_.*</sec:exclude> </sec:cipherSuitesFilter> </http:tlsClientParameters> </http:conduit> <bean id="cxf" class="org.apache.cxf.bus.CXFBusImpl"/> </beans>