You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2021/08/03 07:05:35 UTC

[camel] 01/02: CAMEL-16830: Use automatic detection of gRPC SSL provider instead of hardcoded configuration

This is an automated email from the ASF dual-hosted git repository.

jamesnetherton pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 77bb5c490da373ca026793d9294fc8ee1a5239ec
Author: James Netherton <ja...@gmail.com>
AuthorDate: Tue Aug 3 07:35:13 2021 +0100

    CAMEL-16830: Use automatic detection of gRPC SSL provider instead of hardcoded configuration
---
 .../org/apache/camel/component/grpc/GrpcConsumer.java  |  4 +---
 .../org/apache/camel/component/grpc/GrpcProducer.java  |  4 +---
 .../camel/component/grpc/GrpcConsumerSecurityTest.java | 18 +++++++++++-------
 .../camel/component/grpc/GrpcProducerSecurityTest.java | 18 +++++++++++-------
 4 files changed, 24 insertions(+), 20 deletions(-)

diff --git a/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/GrpcConsumer.java b/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/GrpcConsumer.java
index c6af1b3..c8b4e69 100644
--- a/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/GrpcConsumer.java
+++ b/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/GrpcConsumer.java
@@ -27,7 +27,6 @@ import io.grpc.netty.NegotiationType;
 import io.grpc.netty.NettyServerBuilder;
 import io.netty.handler.ssl.ClientAuth;
 import io.netty.handler.ssl.SslContextBuilder;
-import io.netty.handler.ssl.SslProvider;
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
@@ -120,8 +119,7 @@ public class GrpcConsumer extends DefaultConsumer {
                                     ResourceHelper.resolveResourceAsInputStream(endpoint.getCamelContext(),
                                             configuration.getKeyResource()),
                                     configuration.getKeyPassword())
-                            .clientAuth(ClientAuth.REQUIRE)
-                            .sslProvider(SslProvider.OPENSSL);
+                            .clientAuth(ClientAuth.REQUIRE);
 
             if (ObjectHelper.isNotEmpty(configuration.getTrustCertCollectionResource())) {
                 sslContextBuilder
diff --git a/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/GrpcProducer.java b/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/GrpcProducer.java
index c1c8df9..eef7d85 100644
--- a/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/GrpcProducer.java
+++ b/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/GrpcProducer.java
@@ -26,7 +26,6 @@ import io.grpc.netty.NegotiationType;
 import io.grpc.netty.NettyChannelBuilder;
 import io.grpc.stub.StreamObserver;
 import io.netty.handler.ssl.SslContextBuilder;
-import io.netty.handler.ssl.SslProvider;
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
 import org.apache.camel.component.grpc.auth.jwt.JwtCallCredentials;
@@ -165,7 +164,6 @@ public class GrpcProducer extends DefaultAsyncProducer {
             ObjectHelper.notNull(configuration.getKeyResource(), "keyResource");
 
             SslContextBuilder sslContextBuilder = GrpcSslContexts.forClient()
-                    .sslProvider(SslProvider.OPENSSL)
                     .keyManager(
                             ResourceHelper.resolveResourceAsInputStream(endpoint.getCamelContext(),
                                     configuration.getKeyCertChainResource()),
@@ -179,7 +177,7 @@ public class GrpcProducer extends DefaultAsyncProducer {
                                 configuration.getTrustCertCollectionResource()));
             }
 
-            channelBuilder = channelBuilder.sslContext(sslContextBuilder.build());
+            channelBuilder = channelBuilder.sslContext(GrpcSslContexts.configure(sslContextBuilder).build());
         }
 
         channel = channelBuilder.negotiationType(configuration.getNegotiationType())
diff --git a/components/camel-grpc/src/test/java/org/apache/camel/component/grpc/GrpcConsumerSecurityTest.java b/components/camel-grpc/src/test/java/org/apache/camel/component/grpc/GrpcConsumerSecurityTest.java
index 62ff3a8..932f19a 100644
--- a/components/camel-grpc/src/test/java/org/apache/camel/component/grpc/GrpcConsumerSecurityTest.java
+++ b/components/camel-grpc/src/test/java/org/apache/camel/component/grpc/GrpcConsumerSecurityTest.java
@@ -26,7 +26,8 @@ import io.grpc.ManagedChannel;
 import io.grpc.netty.GrpcSslContexts;
 import io.grpc.netty.NettyChannelBuilder;
 import io.grpc.stub.StreamObserver;
-import io.netty.handler.ssl.SslProvider;
+import io.netty.handler.ssl.OpenSslClientContext;
+import io.netty.handler.ssl.SslContext;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.grpc.auth.jwt.JwtAlgorithm;
 import org.apache.camel.component.grpc.auth.jwt.JwtCallCredentials;
@@ -42,6 +43,7 @@ import org.slf4j.LoggerFactory;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class GrpcConsumerSecurityTest extends CamelTestSupport {
 
@@ -70,13 +72,15 @@ public class GrpcConsumerSecurityTest extends CamelTestSupport {
         String correctJwtToken = JwtHelper.createJwtToken(JwtAlgorithm.HMAC256, GRPC_JWT_CORRECT_SECRET, null, null);
         String incorrectJwtToken = JwtHelper.createJwtToken(JwtAlgorithm.HMAC256, GRPC_JWT_INCORRECT_SECRET, null, null);
 
+        SslContext sslContext = GrpcSslContexts.forClient()
+                .keyManager(new File("src/test/resources/certs/client.pem"), new File("src/test/resources/certs/client.key"))
+                .trustManager(new File("src/test/resources/certs/ca.pem"))
+                .build();
+
+        assertTrue(sslContext instanceof OpenSslClientContext);
+
         tlsChannel = NettyChannelBuilder.forAddress("localhost", GRPC_TLS_TEST_PORT)
-                .sslContext(GrpcSslContexts.forClient()
-                        .sslProvider(SslProvider.OPENSSL)
-                        .keyManager(new File("src/test/resources/certs/client.pem"),
-                                new File("src/test/resources/certs/client.key"))
-                        .trustManager(new File("src/test/resources/certs/ca.pem"))
-                        .build())
+                .sslContext(sslContext)
                 .build();
 
         jwtCorrectChannel = NettyChannelBuilder.forAddress("localhost", GRPC_JWT_CORRECT_TEST_PORT).usePlaintext().build();
diff --git a/components/camel-grpc/src/test/java/org/apache/camel/component/grpc/GrpcProducerSecurityTest.java b/components/camel-grpc/src/test/java/org/apache/camel/component/grpc/GrpcProducerSecurityTest.java
index 8812c2d..7ed5f4e 100644
--- a/components/camel-grpc/src/test/java/org/apache/camel/component/grpc/GrpcProducerSecurityTest.java
+++ b/components/camel-grpc/src/test/java/org/apache/camel/component/grpc/GrpcProducerSecurityTest.java
@@ -25,7 +25,8 @@ import io.grpc.netty.GrpcSslContexts;
 import io.grpc.netty.NettyServerBuilder;
 import io.grpc.stub.StreamObserver;
 import io.netty.handler.ssl.ClientAuth;
-import io.netty.handler.ssl.SslProvider;
+import io.netty.handler.ssl.OpenSslServerContext;
+import io.netty.handler.ssl.SslContext;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.grpc.auth.jwt.JwtAlgorithm;
 import org.apache.camel.component.grpc.auth.jwt.JwtServerInterceptor;
@@ -61,13 +62,16 @@ public class GrpcProducerSecurityTest extends CamelTestSupport {
 
     @BeforeAll
     public static void startGrpcServer() throws Exception {
+        SslContext sslContext = GrpcSslContexts
+                .forServer(new File("src/test/resources/certs/server.pem"), new File("src/test/resources/certs/server.key"))
+                .trustManager(new File("src/test/resources/certs/ca.pem"))
+                .clientAuth(ClientAuth.REQUIRE)
+                .build();
+
+        assertTrue(sslContext instanceof OpenSslServerContext);
+
         grpcServerWithTLS = NettyServerBuilder.forPort(GRPC_TLS_TEST_PORT)
-                .sslContext(GrpcSslContexts.forServer(new File("src/test/resources/certs/server.pem"),
-                        new File("src/test/resources/certs/server.key"))
-                        .trustManager(new File("src/test/resources/certs/ca.pem"))
-                        .clientAuth(ClientAuth.REQUIRE)
-                        .sslProvider(SslProvider.OPENSSL)
-                        .build())
+                .sslContext(sslContext)
                 .addService(new PingPongImpl()).build().start();
 
         grpcServerWithJWT = NettyServerBuilder.forPort(GRPC_JWT_TEST_PORT)