有没有一种方法可以使IBM JVM使用标准RFC密码套件名称?

问题描述 投票:0回答:1

所有IBM密码套件名称都以SSL_开头,即使标准说某些名称应以TLS_开头。是否可以让JVM使用标准名称,所以我不必创建特殊的包含/排除规则来使Jetty 9与SSL配合使用?以下链接中提到了执行此操作的选项,但是我找不到有关该选项名称是什么或如何设置的任何文档。https://github.com/eclipse/jetty.project/issues/2921

java ssl jetty
1个回答
0
投票

https://www.ibm.com/developerworks/community/forums/html/threadTopic?id=9b5a56a9-fa46-4031-b33b-df91e28d77c2

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层未排除的列入黑名单的密码套件。

© www.soinside.com 2019 - 2024. All rights reserved.