所有IBM密码套件名称都以SSL_开头,即使标准规定某些名称应以TLS_开头。是否可以让JVM使用标准名称,所以我不必创建特殊的包含/排除规则来使Jetty 9与SSL配合使用?以下链接中提到了执行此操作的选项,但是我找不到有关该选项名称是什么或如何设置的任何文档。 https://github.com/eclipse/jetty.project/issues/2921
答案 0 :(得分:1)
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初始化失败。如果您确实设法解决了这个问题,那么Blacklisted Cipher Suites from the HTTP/2 RFC的列表也将使用RFC名称,并且不能被覆盖,因此这将增加从远程端点生成INADEQUATE_SECURITY
的可能性。几乎可以肯定,因为您将使用Jetty的HTTP / 2层未排除的列入黑名单的密码套件。