所有IBM密码套件名称都以SSL_开头,即使标准说某些名称应以TLS_开头。是否可以让JVM使用标准名称,所以我不必创建特殊的包含/排除规则来使Jetty 9与SSL配合使用?以下链接中提到了执行此操作的选项,但是我找不到有关该选项名称是什么或如何设置的任何文档。https://github.com/eclipse/jetty.project/issues/2921
IBM J9 JVM仅在声明要使用的密码套件的精确列表时才允许与RFC名称互操作。
换句话说,它将永远不会返回受支持列表中的RFC名称,但是在声明要使用的名称时将使用RFC名称。
IBM J9 JVM的此决定与许多项目不兼容。
使用IBM J9 JVM时,必须声明要与在IBM J9 JVM上使用SSLEngine的任何产品一起使用的密码套件的完整列表。 (HTTP客户端,WebSocket客户端,REST客户端,HTTP服务器等)
在Jetty上,您需要创建一个自定义SslContextFactory
才能以IBM J9 JVM的方式运行,而不是使用RFC名称模式进行包含/排除。重写以下方法,并以IBM J9 JVM的方式实现它。
public SSLParameters customize(SSLParameters sslParams)
{
super.customize(sslParams);
_selectedCipherSuites = // String[] of selected cipher suites on IBM J9
sslParams.setCipherSuites(_selectedCipherSuites);
}
另外一种方法,更有益于健康,是创建一个新的注册安全提供程序(例如“ myIbmRFC”),该提供程序可以返回使用RFC名称的SSLContext
。
它必须支持...
String protocol = "TLS";
String provider = "myIbmRFC";
SSLContext context = SSLContext.getInstance(protocol, provider);
context.init(....); // read javadoc about this
SSLParameters enabled = context.getDefaultSSLParameters();
SSLParameters supported = context.getSupportedSSLParameters();
// these two should return RFC names (a mapping between IBM and RFC)
String[] enabledCipherSuites = enabled.getCipherSuites();
String[] supportedCipherSuites = supported.getCipherSuites();
注意:您不能在IBM J9 JVM上使用HTTP / 2。无法找到
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
Cipher that is mandated by the RFC,因此结束HTTP / 2初始化失败。如果您确实做到了这一点,那么TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
的列表也将使用RFC名称,并且不能被覆盖,因此当您从远程端点生成Blacklisted Cipher Suites from the HTTP/2 RFC时,您的可能性将提高到几乎确定将使用Jetty的HTTP / 2层未排除的列入黑名单的密码套件。