覆盖jetty默认密码

时间:2016-10-21 20:20:26

标签: jetty tls1.2 jetty-9

我最初的问题是当我在jetty配置文件中使用IncludeCipherSuites选项时,只支持TLS 1.2。请参阅以下帖子了解详情: Jetty IncludeCipherSuites enables only TLS 1.2

根据评论看来,如果我在我的码头配置文件中没有提供ExcludeCipherSuite,则会使用jetty默认排除密码列表,并且排除了我通过IncludeCipherSuites选项明确启用的许多密码(如果它们在码头中)默认排除列表)。

只需在同一个配置文件中添加一个空的ExcludeCiphersSuites标记和IncludeCipherSuites标记即可解决问题。通过说空,我的意思是我没有添加任何密码来排除,我只是添加了ExcludeCiphersSuites标签和空密码列表:

<Set name="ExcludeCipherSuites">
    <Array type="String">
    </Array>
</Set>

我的理解是之前(仅使用IncludeCipherSuites选项)我所包含的一些密码被jetty默认排除列表排除。但是,使用空列表强制添加ExcludeCiphersSuites选项以使用空列表覆盖jetty的默认排除列表,因此不会从包含密码列表中排除任何内容。你能否证实我的理解是正确的?

同样根据以上所有调查结果,jetty具有以下密码默认配置:

Jetty default exclude ciphers: CIPHER1, CIPHER2
Jetty default include ciphers: CIPHER3, CIPHER4

我想配置我的码头以仅支持CIPHER1和CIPHER5。以下是我应该使用的正确配置吗?

<Set name="ExcludeCipherSuites">
    <Array type="String">
    </Array>
</Set>

<Set name="IncludeCipherSuites">
    <Array type="String">
         <Item>CIPHER1</Item>
         <Item>CIPHER2</Item>
    </Array>
</Set>

这会覆盖所有jetty默认值并强制jetty支持CIPHER1和CIPHER2而不是其他任何东西吗?

1 个答案:

答案 0 :(得分:2)

Jetty不会禁用协议TLS / 1.0或TLS / 1.1。

协议,密码,密钥库,信任库等的配置均由SslContextFactory

控制

SslContextFactory能够使用addExcludeProtocols()

等配置使用包含/排除协议来禁用协议

请注意,Jetty在其默认排除项中不包含TLS / 1.0或TLS / 1.1。

截至Jetty 9.3.13.v20161014 the default exclusion of protocols的内容如下:

addExcludeProtocols("SSL", "SSLv2", "SSLv2Hello", "SSLv3");

由于您似乎专门询问密码套件,请知道Jetty 9.3.13.v20161014 default exclusions for Cipher suites如下:

setExcludeCipherSuites("^.*_(MD5|SHA|SHA1)$");

这恰好是在2008年被宣布为易受攻击的同一组密码套件,并且将于2017年1月1日停止在Chrome和Firefox客户端上使用。此MD5 / SHA / SHA1的终止开关存在于在过去的几年(5-ish?)年内发布了所有版本的Chrome和Firefox。

另请注意,Java本身会禁用各种协议和密码套件算法。

$ grep -E "^jdk.*disabled" $JAVA_HOME/jre/lib/security/java.security
jdk.certpath.disabledAlgorithms=MD2, MD5, RSA keySize < 1024
jdk.tls.disabledAlgorithms=SSLv3, RC4, MD5withRSA, DH keySize < 768