4.2. 密码套件过滤器
概述
在典型的应用程序中,您通常希望将可用密码套件的列表限制为 JSSE 供应商支持的密码的子集。
通常,您应该使用 sec:cipherSuitesFilter
元素,而不是 sec:cipherSuites
元素来选择您要使用的密码套件。
不建议使用 sec:cipherSuites
元素,因为它具有非直观语义:您可以使用它要求加载的安全供应商至少支持列出的密码套件。但是,载入的安全供应商可能会支持比指定的加密套件更多的加密套件。因此,当您使用 sec:cipherSuites
元素时,在运行时支持哪些密码套件并不明确。
命名空间
表 4.1 “用于配置 Cipher Suite 过滤器的命名空间” 显示本节中引用的 XML 命名空间:
prefix | 命名空间 URI |
---|---|
| |
| |
|
sec:cipherSuitesFilter element
您可以使用 sec:cipherSuitesFilter
元素定义密码套件过滤器,可以是 http:tlsClientParameters
元素或 httpj:tlsServerParameters
元素的子级。典型的 sec:cipherSuitesFilter
元素在 例 4.1 “sec 的结构:cipherSuitesFilter Element” 中显示概要结构。
例 4.1. sec 的结构:cipherSuitesFilter Element
<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:cipherSuitesFilter
元素中添加sec:include
子元素。sec:include
元素的内容是一个正则表达式,它与一个或多个密码套件名称匹配(例如,请参阅 “SunJSSE 支持的密码套件”一节中的密码套件名称)。 要进一步重新定义所选密码套件集合,您可以在
sec:cipherSuitesFilter
元素中添加sec:exclude
元素。sec:exclude
元素的内容是一个正则表达式,与当前包含的集合中的零或更多密码套件名称匹配。注意有时,显式排除当前未包含的密码套件,以便根据意外包含不必要的密码套件来更好地验证。
正则表达式匹配
在 sec:include
和 sec:exclude
元素中显示的正则表达式的 grammar 由 Java 正则表达式实用程序 java.util.regex.Pattern
定义。有关 grammar 的详细信息,请参阅 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>