From 5879b53c573549028dbcf84fdc206503311870a6 Mon Sep 17 00:00:00 2001 From: Russell Shaw <69813534+kiwi1969@users.noreply.github.com> Date: Wed, 16 Sep 2020 11:07:52 -0400 Subject: [PATCH] netty: Add support for IBMJSSE2 (#7422) This is a very simple change to test for IBMJSSE2 security provider in addition to the others. IBM JRE does not support the Sun provider, but instead has IBMJSSE2 which supports the same API calls. I tested this on Z/OS machine as now it works when before it couldn't find a security provider --- .../main/java/io/grpc/netty/GrpcSslContexts.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/netty/src/main/java/io/grpc/netty/GrpcSslContexts.java b/netty/src/main/java/io/grpc/netty/GrpcSslContexts.java index 9be8f9e849c..38baa81f7a7 100644 --- a/netty/src/main/java/io/grpc/netty/GrpcSslContexts.java +++ b/netty/src/main/java/io/grpc/netty/GrpcSslContexts.java @@ -82,6 +82,7 @@ private GrpcSslContexts() {} NEXT_PROTOCOL_VERSIONS); private static final String SUN_PROVIDER_NAME = "SunJSSE"; + private static final String IBM_PROVIDER_NAME = "IBMJSSE2"; /** * Creates an SslContextBuilder with ciphers and APN appropriate for gRPC. @@ -196,7 +197,14 @@ public static SslContextBuilder configure(SslContextBuilder builder, Provider jd apc = ALPN; } else { throw new IllegalArgumentException( - SUN_PROVIDER_NAME + " selected, but Java 9+ and Jetty NPN/ALPN unavailable"); + jdkProvider.getName() + " selected, but Java 9+ and Jetty NPN/ALPN unavailable"); + } + } else if (IBM_PROVIDER_NAME.equals(jdkProvider.getName())) { + if (JettyTlsUtil.isJava9AlpnAvailable()) { + apc = ALPN; + } else { + throw new IllegalArgumentException( + jdkProvider.getName() + " selected, but Java 9+ ALPN unavailable"); } } else if (ConscryptLoader.isConscrypt(jdkProvider)) { apc = ALPN; @@ -243,6 +251,10 @@ private static Provider findJdkProvider() { || JettyTlsUtil.isJava9AlpnAvailable()) { return provider; } + } else if (IBM_PROVIDER_NAME.equals(provider.getName())) { + if (JettyTlsUtil.isJava9AlpnAvailable()) { + return provider; + } } else if (ConscryptLoader.isConscrypt(provider)) { return provider; }