Skip to content

Commit 3a98fc5

Browse files
committed
NettyGrpcServer -- configure ALPN
Before this change the following exception was thrown when trying to launch the chaincode server with TLS enabled: java.lang.IllegalArgumentException: ALPN must be enabled and list HTTP/2 as a supported protocol. at com.google.common.base.Preconditions.checkArgument(Preconditions.java:142) at io.grpc.netty.shaded.io.grpc.netty.GrpcSslContexts.ensureAlpnAndH2Enabled(GrpcSslContexts.java:260) at io.grpc.netty.shaded.io.grpc.netty.NettyServerBuilder.sslContext(NettyServerBuilder.java:300) at org.hyperledger.fabric.shim.NettyGrpcServer.<init>(NettyGrpcServer.java:60) at org.hyperledger.fabric.shim.NettyChaincodeServer.<init>(NettyChaincodeServer.java:27) at org.hyperledger.fabric.shim.NettyGrpcServerTest.startAndStopTlsWithoutPassword(NettyGrpcServerTest.java:321) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) Signed-off-by: Fedor Tokarev <[email protected]>
1 parent 63c12ff commit 3a98fc5

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/NettyGrpcServer.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99

1010
import io.grpc.Server;
1111
import io.grpc.netty.shaded.io.grpc.netty.NettyServerBuilder;
12+
import io.grpc.netty.shaded.io.netty.handler.ssl.ApplicationProtocolConfig;
13+
import io.grpc.netty.shaded.io.netty.handler.ssl.ApplicationProtocolNames;
1214
import io.grpc.netty.shaded.io.netty.handler.ssl.SslContextBuilder;
1315
import org.apache.commons.logging.Log;
1416
import org.apache.commons.logging.LogFactory;
@@ -56,11 +58,21 @@ public NettyGrpcServer(final ChaincodeBase chaincodeBase, final ChaincodeServerP
5658
final File keyCertChainFile = Paths.get(chaincodeServerProperties.getKeyCertChainFile()).toFile();
5759
final File keyFile = Paths.get(chaincodeServerProperties.getKeyFile()).toFile();
5860

61+
SslContextBuilder sslContextBuilder;
5962
if (chaincodeServerProperties.getKeyPassword() == null || chaincodeServerProperties.getKeyPassword().isEmpty()) {
60-
serverBuilder.sslContext(SslContextBuilder.forServer(keyCertChainFile, keyFile).build());
63+
sslContextBuilder = SslContextBuilder.forServer(keyCertChainFile, keyFile);
6164
} else {
62-
serverBuilder.sslContext(SslContextBuilder.forServer(keyCertChainFile, keyFile, chaincodeServerProperties.getKeyPassword()).build());
65+
sslContextBuilder = SslContextBuilder.forServer(keyCertChainFile, keyFile, chaincodeServerProperties.getKeyPassword());
6366
}
67+
68+
ApplicationProtocolConfig apn = new ApplicationProtocolConfig(
69+
ApplicationProtocolConfig.Protocol.ALPN,
70+
ApplicationProtocolConfig.SelectorFailureBehavior.NO_ADVERTISE,
71+
ApplicationProtocolConfig.SelectedListenerFailureBehavior.ACCEPT,
72+
ApplicationProtocolNames.HTTP_2);
73+
sslContextBuilder.applicationProtocolConfig(apn);
74+
75+
serverBuilder.sslContext(sslContextBuilder.build());
6476
}
6577

6678
logger.info("<<<<<<<<<<<<<chaincodeServerProperties>>>>>>>>>>>>:\n");

0 commit comments

Comments
 (0)