playframework/play-samples

play-scala-grpc-example run exception

borice opened this issue · 5 comments

Cloned the play-samples on my machine, and followed the documentation for locally running the play-scala-grpc-example sample app, but received an exception when invoking curl --insecure https://localhost:9443/

Here's the exception on the server:

! @7mf0gi45h - Internal server error, for (GET) [https://localhost:9443/] ->

play.api.UnexpectedException: Unexpected exception[StatusRuntimeException: UNAVAILABLE: io exception
Channel Pipeline: [SslHandler#0, ProtocolNegotiators$ClientTlsHandler#0, WriteBufferingAndExceptionHandler#0, DefaultChannelPipeline$TailContext#0]]
	at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:358)
	at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:264)
	at play.core.server.AkkaHttpServer$$anonfun$2.applyOrElse(AkkaHttpServer.scala:430)
	at play.core.server.AkkaHttpServer$$anonfun$2.applyOrElse(AkkaHttpServer.scala:422)
	at scala.concurrent.Future.$anonfun$recoverWith$1(Future.scala:417)
	at scala.concurrent.impl.Promise.$anonfun$transformWith$1(Promise.scala:41)
	at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:64)
	at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:63)
	at akka.dispatch.BatchingExecutor$BlockableBatch.$anonfun$run$1(BatchingExecutor.scala:100)
	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
Caused by: io.grpc.StatusRuntimeException: UNAVAILABLE: io exception
Channel Pipeline: [SslHandler#0, ProtocolNegotiators$ClientTlsHandler#0, WriteBufferingAndExceptionHandler#0, DefaultChannelPipeline$TailContext#0]
	at io.grpc.Status.asRuntimeException(Status.java:533)
	at akka.grpc.internal.UnaryCallAdapter.onClose(UnaryCallAdapter.scala:40)
	at io.grpc.internal.ClientCallImpl.closeObserver(ClientCallImpl.java:413)
	at io.grpc.internal.ClientCallImpl.access$500(ClientCallImpl.java:66)
	at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInternal(ClientCallImpl.java:742)
	at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInContext(ClientCallImpl.java:721)
	at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
	at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:123)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
Caused by: javax.net.ssl.SSLHandshakeException: General OpenSslEngine problem
	at io.grpc.netty.shaded.io.netty.handler.ssl.ReferenceCountedOpenSslEngine.handshakeException(ReferenceCountedOpenSslEngine.java:1771)
	at io.grpc.netty.shaded.io.netty.handler.ssl.ReferenceCountedOpenSslEngine.wrap(ReferenceCountedOpenSslEngine.java:776)
	at javax.net.ssl.SSLEngine.wrap(SSLEngine.java:511)
	at io.grpc.netty.shaded.io.netty.handler.ssl.SslHandler.wrap(SslHandler.java:1079)
	at io.grpc.netty.shaded.io.netty.handler.ssl.SslHandler.wrapNonAppData(SslHandler.java:970)
	at io.grpc.netty.shaded.io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1443)
	at io.grpc.netty.shaded.io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1275)
	at io.grpc.netty.shaded.io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1322)
	at io.grpc.netty.shaded.io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:501)
	at io.grpc.netty.shaded.io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:440)
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:456)
	at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:323)
	at sun.security.validator.Validator.validate(Validator.java:271)
	at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:315)
	at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:278)
	at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:141)
	at io.grpc.netty.shaded.io.netty.handler.ssl.OpenSslTlsv13X509ExtendedTrustManager.checkServerTrusted(OpenSslTlsv13X509ExtendedTrustManager.java:223)
	at io.grpc.netty.shaded.io.netty.handler.ssl.ReferenceCountedOpenSslClientContext$ExtendedTrustManagerVerifyCallback.verify(ReferenceCountedOpenSslClientContext.java:261)
	at io.grpc.netty.shaded.io.netty.handler.ssl.ReferenceCountedOpenSslContext$AbstractCertificateVerifier.verify(ReferenceCountedOpenSslContext.java:700)
	at io.grpc.netty.shaded.io.netty.internal.tcnative.SSL.readFromSSL(Native Method)
	Suppressed: javax.net.ssl.SSLHandshakeException: error:1000007d:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED
		at io.grpc.netty.shaded.io.netty.handler.ssl.ReferenceCountedOpenSslEngine.sslReadErrorResult(ReferenceCountedOpenSslEngine.java:1287)
		at io.grpc.netty.shaded.io.netty.handler.ssl.ReferenceCountedOpenSslEngine.unwrap(ReferenceCountedOpenSslEngine.java:1248)
		at io.grpc.netty.shaded.io.netty.handler.ssl.ReferenceCountedOpenSslEngine.unwrap(ReferenceCountedOpenSslEngine.java:1324)
		at io.grpc.netty.shaded.io.netty.handler.ssl.SslHandler$SslEngineType$1.unwrap(SslHandler.java:201)
		at io.grpc.netty.shaded.io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1380)
		at io.grpc.netty.shaded.io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1275)
		at io.grpc.netty.shaded.io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1322)
		at io.grpc.netty.shaded.io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:501)
		at io.grpc.netty.shaded.io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:440)
		at io.grpc.netty.shaded.io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276)
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141)
	at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126)
	at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280)
	at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:451)
	at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:323)
	at sun.security.validator.Validator.validate(Validator.java:271)
	at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:315)
	at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:278)
	at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:141)
	at io.grpc.netty.shaded.io.netty.handler.ssl.OpenSslTlsv13X509ExtendedTrustManager.checkServerTrusted(OpenSslTlsv13X509ExtendedTrustManager.java:223)

Using following java version on OSX 11.6.2:

openjdk version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-bre_2021_10_20_23_15-b00)
OpenJDK 64-Bit Server VM (build 25.312-b00, mixed mode)
mkurz commented

Does it work with Java 11?

Not for me. Same exception.

$ sbt clean runProd                                                                 
[info] welcome to sbt 1.3.13 (Homebrew Java 11.0.12)
[info] loading settings for project global-plugins from plugins.sbt ...
[info] loading global plugins from /Users/capitanu/.sbt/1.0/plugins
[info] loading settings for project play-scala-grpc-example-build-build from buildinfo.sbt ...
[info] loading project definition from /Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/project/project
[info] loading settings for project play-scala-grpc-example-build from paradox.sbt,plugins.sbt ...
[info] loading project definition from /Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/project
[info] loading settings for project play-scala-grpc-example from build.sbt ...
[info] loading settings for project docs from build.sbt ...
[info]   __              __
[info]   \ \     ____   / /____ _ __  __
[info]    \ \   / __ \ / // __ `// / / /
[info]    / /  / /_/ // // /_/ // /_/ /
[info]   /_/  / .___//_/ \__,_/ \__, /
[info]       /_/               /____/
[info]
[info] Version 2.8.13 running Java 11.0.12
[info]
[info] Play is run entirely by the community. If you want to keep using it please consider donating:
[info] https://www.playframework.com/sponsors
[info]
[success] Total time: 0 s, completed Jan 30, 2022, 4:33:42 PM
[info] Wrote /Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/target/scala-2.12/play-scala-grpc-example_2.12-1.0-SNAPSHOT.pom
[warn] There may be incompatibilities among your library dependencies; run 'evicted' to see detailed eviction warnings.
[info] Compiling 1 protobuf files to /Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/target/scala-2.12/akka-grpc/main
[info] Compiling schema /Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/app/protobuf/helloworld.proto
protoc-jar: protoc version: 3.11.4, detected platform: osx-x86_64 (mac os x/x86_64)
protoc-jar: embedded: bin/3.11.4/protoc-3.11.4-osx-x86_64.exe
protoc-jar: executing: [/var/folders/r5/z3nmn9z10kz22ccrztydswk80000gn/T/protocjar2374479514212904201/bin/protoc.exe, --plugin=protoc-gen-jvm_0=/var/folders/r5/z3nmn9z10kz22ccrztydswk80000gn/T/protocbridge5946874575416728784, --plugin=protoc-gen-jvm_1=/var/folders/r5/z3nmn9z10kz22ccrztydswk80000gn/T/protocbridge15179089231811965558, --plugin=protoc-gen-jvm_2=/var/folders/r5/z3nmn9z10kz22ccrztydswk80000gn/T/protocbridge14106307900279389958, --plugin=protoc-gen-jvm_3=/var/folders/r5/z3nmn9z10kz22ccrztydswk80000gn/T/protocbridge3291260986314496511, --plugin=protoc-gen-play-grpc-client-scala_4=/var/folders/r5/z3nmn9z10kz22ccrztydswk80000gn/T/protocbridge13445907278678428938, --plugin=protoc-gen-play-grpc-server-scala_5=/var/folders/r5/z3nmn9z10kz22ccrztydswk80000gn/T/protocbridge11292358243235635222, --jvm_0_out=/Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/target/scala-2.12/akka-grpc/main, --jvm_0_opt=flat_package, --jvm_1_out=/Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/target/scala-2.12/akka-grpc/main, --jvm_1_opt=flat_package, --jvm_2_out=/Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/target/scala-2.12/akka-grpc/main, --jvm_2_opt=flat_package, --jvm_3_out=/Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/target/scala-2.12/akka-grpc/main, --jvm_3_opt=flat_package, --play-grpc-client-scala_4_out=/Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/target/scala-2.12/akka-grpc/main, --play-grpc-client-scala_4_opt=flat_package, --play-grpc-server-scala_5_out=/Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/target/scala-2.12/akka-grpc/main, --play-grpc-server-scala_5_opt=flat_package, -I/Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/app/protobuf, -I/Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/target/protobuf_external_src, -I/Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/app/proto, -I/Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/target/protobuf_external, /Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/app/protobuf/helloworld.proto]
/Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/app/proto: warning: directory does not exist.
[info] Generating Akka gRPC service interface for example.myapp.helloworld.grpc.GreeterService
[info] Generating Akka gRPC client for example.myapp.helloworld.grpc.GreeterService
[info] Generating Akka gRPC service handler for example.myapp.helloworld.grpc.GreeterService
[info] Generating Play gRPC play client provider for example.myapp.helloworld.grpc.GreeterService
[info] Generated [example.myapp.helloworld.grpc.AkkaGrpcClientModule] add it to play.modules.enabled and a section with Akka gRPC client config under akka.grpc.client."servicepackage.ServiceName" to be able to inject client instances.
[info] Generating Play gRPC service play router for example.myapp.helloworld.grpc.GreeterService
[info] Main Scala API documentation to /Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/target/scala-2.12/api...
[info] Compiling 16 Scala sources and 1 Java source to /Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/target/scala-2.12/classes ...
[info] Non-compiled module 'compiler-bridge_2.12' for Scala 2.12.13. Compiling...
[info]   Compilation completed in 7.878s.
model contains 37 documentable templates
[info] Main Scala API documentation successful.

(Starting server. Type Ctrl+D to exit logs, the server will remain in background)

[jetty-alpn-agent][ warn] Could not find a matching alpn-boot jar for Java version: 11.0.12
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.inject.internal.cglib.core.$ReflectUtils$1 (file:/Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/target/universal/stage/lib/com.google.inject.guice-4.2.3.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of com.google.inject.internal.cglib.core.$ReflectUtils$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
[info] a.e.s.Slf4jLogger - Slf4jLogger started
[info] play.api.Play - Application started (Prod) (no global state)
[info] p.c.s.AkkaHttpServer - Enabling HTTP/2 on Akka HTTP server...
[info] p.c.s.AkkaHttpServer - Listening for HTTP on /127.0.0.1:9000
[info] p.c.s.AkkaHttpServer - Listening for HTTPS on /127.0.0.1:9443
[error] p.a.h.DefaultHttpErrorHandler -

! @7mgcgd9mh - Internal server error, for (GET) [https://localhost:9443/] ->

play.api.UnexpectedException: Unexpected exception[StatusRuntimeException: UNAVAILABLE: io exception
Channel Pipeline: [SslHandler#0, ProtocolNegotiators$ClientTlsHandler#0, WriteBufferingAndExceptionHandler#0, DefaultChannelPipeline$TailContext#0]]
	at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:358)
	at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:264)
	at play.core.server.AkkaHttpServer$$anonfun$2.applyOrElse(AkkaHttpServer.scala:430)
	at play.core.server.AkkaHttpServer$$anonfun$2.applyOrElse(AkkaHttpServer.scala:422)
	at scala.concurrent.Future.$anonfun$recoverWith$1(Future.scala:417)
	at scala.concurrent.impl.Promise.$anonfun$transformWith$1(Promise.scala:41)
	at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:64)
	at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:63)
	at akka.dispatch.BatchingExecutor$BlockableBatch.$anonfun$run$1(BatchingExecutor.scala:100)
	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
Caused by: io.grpc.StatusRuntimeException: UNAVAILABLE: io exception
Channel Pipeline: [SslHandler#0, ProtocolNegotiators$ClientTlsHandler#0, WriteBufferingAndExceptionHandler#0, DefaultChannelPipeline$TailContext#0]
	at io.grpc.Status.asRuntimeException(Status.java:533)
	at akka.grpc.internal.UnaryCallAdapter.onClose(UnaryCallAdapter.scala:40)
	at io.grpc.internal.ClientCallImpl.closeObserver(ClientCallImpl.java:413)
	at io.grpc.internal.ClientCallImpl.access$500(ClientCallImpl.java:66)
	at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInternal(ClientCallImpl.java:742)
	at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInContext(ClientCallImpl.java:721)
	at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
	at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:123)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
Caused by: javax.net.ssl.SSLHandshakeException: General OpenSslEngine problem
	at io.grpc.netty.shaded.io.netty.handler.ssl.ReferenceCountedOpenSslEngine.handshakeException(ReferenceCountedOpenSslEngine.java:1771)
	at io.grpc.netty.shaded.io.netty.handler.ssl.ReferenceCountedOpenSslEngine.wrap(ReferenceCountedOpenSslEngine.java:776)
	at java.base/javax.net.ssl.SSLEngine.wrap(SSLEngine.java:522)
	at io.grpc.netty.shaded.io.netty.handler.ssl.SslHandler.wrap(SslHandler.java:1079)
	at io.grpc.netty.shaded.io.netty.handler.ssl.SslHandler.wrapNonAppData(SslHandler.java:970)
	at io.grpc.netty.shaded.io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1443)
	at io.grpc.netty.shaded.io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1275)
	at io.grpc.netty.shaded.io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1322)
	at io.grpc.netty.shaded.io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:501)
	at io.grpc.netty.shaded.io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:440)
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:439)
	at java.base/sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:306)
	at java.base/sun.security.validator.Validator.validate(Validator.java:264)
	at java.base/sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:313)
	at java.base/sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:276)
	at java.base/sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:141)
	at io.grpc.netty.shaded.io.netty.handler.ssl.ReferenceCountedOpenSslClientContext$ExtendedTrustManagerVerifyCallback.verify(ReferenceCountedOpenSslClientContext.java:261)
	at io.grpc.netty.shaded.io.netty.handler.ssl.ReferenceCountedOpenSslContext$AbstractCertificateVerifier.verify(ReferenceCountedOpenSslContext.java:700)
	at io.grpc.netty.shaded.io.netty.internal.tcnative.SSL.readFromSSL(Native Method)
	at io.grpc.netty.shaded.io.netty.handler.ssl.ReferenceCountedOpenSslEngine.readPlaintextData(ReferenceCountedOpenSslEngine.java:595)
	Suppressed: javax.net.ssl.SSLHandshakeException: error:1000007d:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED
		at io.grpc.netty.shaded.io.netty.handler.ssl.ReferenceCountedOpenSslEngine.sslReadErrorResult(ReferenceCountedOpenSslEngine.java:1287)
		at io.grpc.netty.shaded.io.netty.handler.ssl.ReferenceCountedOpenSslEngine.unwrap(ReferenceCountedOpenSslEngine.java:1248)
		at io.grpc.netty.shaded.io.netty.handler.ssl.ReferenceCountedOpenSslEngine.unwrap(ReferenceCountedOpenSslEngine.java:1324)
		at io.grpc.netty.shaded.io.netty.handler.ssl.SslHandler$SslEngineType$1.unwrap(SslHandler.java:201)
		at io.grpc.netty.shaded.io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1380)
		at io.grpc.netty.shaded.io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1275)
		at io.grpc.netty.shaded.io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1322)
		at io.grpc.netty.shaded.io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:501)
		at io.grpc.netty.shaded.io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:440)
		at io.grpc.netty.shaded.io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276)
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at java.base/sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141)
	at java.base/sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126)
	at java.base/java.security.cert.CertPathBuilder.build(CertPathBuilder.java:297)
	at java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:434)
	at java.base/sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:306)
	at java.base/sun.security.validator.Validator.validate(Validator.java:264)
	at java.base/sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:313)
	at java.base/sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:276)
	at java.base/sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:141)
	at io.grpc.netty.shaded.io.netty.handler.ssl.ReferenceCountedOpenSslClientContext$ExtendedTrustManagerVerifyCallback.verify(ReferenceCountedOpenSslClientContext.java:261)

Once the server started (successfully) with sbt runProd, I issued the curl command from before at which point the exception above was thrown and logged on the server.

openjdk version "11.0.12" 2021-07-20
OpenJDK Runtime Environment Homebrew (build 11.0.12+0)
OpenJDK 64-Bit Server VM Homebrew (build 11.0.12+0, mixed mode)

+1

+1 seeing the same. Tried playing around with adding cacerts jvm run args, couldn't get it worked.

Not for me. Same exception.

$ sbt clean runProd                                                                 
[info] welcome to sbt 1.3.13 (Homebrew Java 11.0.12)
[info] loading settings for project global-plugins from plugins.sbt ...
[info] loading global plugins from /Users/capitanu/.sbt/1.0/plugins
[info] loading settings for project play-scala-grpc-example-build-build from buildinfo.sbt ...
[info] loading project definition from /Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/project/project
[info] loading settings for project play-scala-grpc-example-build from paradox.sbt,plugins.sbt ...
[info] loading project definition from /Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/project
[info] loading settings for project play-scala-grpc-example from build.sbt ...
[info] loading settings for project docs from build.sbt ...
[info]   __              __
[info]   \ \     ____   / /____ _ __  __
[info]    \ \   / __ \ / // __ `// / / /
[info]    / /  / /_/ // // /_/ // /_/ /
[info]   /_/  / .___//_/ \__,_/ \__, /
[info]       /_/               /____/
[info]
[info] Version 2.8.13 running Java 11.0.12
[info]
[info] Play is run entirely by the community. If you want to keep using it please consider donating:
[info] https://www.playframework.com/sponsors
[info]
[success] Total time: 0 s, completed Jan 30, 2022, 4:33:42 PM
[info] Wrote /Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/target/scala-2.12/play-scala-grpc-example_2.12-1.0-SNAPSHOT.pom
[warn] There may be incompatibilities among your library dependencies; run 'evicted' to see detailed eviction warnings.
[info] Compiling 1 protobuf files to /Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/target/scala-2.12/akka-grpc/main
[info] Compiling schema /Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/app/protobuf/helloworld.proto
protoc-jar: protoc version: 3.11.4, detected platform: osx-x86_64 (mac os x/x86_64)
protoc-jar: embedded: bin/3.11.4/protoc-3.11.4-osx-x86_64.exe
protoc-jar: executing: [/var/folders/r5/z3nmn9z10kz22ccrztydswk80000gn/T/protocjar2374479514212904201/bin/protoc.exe, --plugin=protoc-gen-jvm_0=/var/folders/r5/z3nmn9z10kz22ccrztydswk80000gn/T/protocbridge5946874575416728784, --plugin=protoc-gen-jvm_1=/var/folders/r5/z3nmn9z10kz22ccrztydswk80000gn/T/protocbridge15179089231811965558, --plugin=protoc-gen-jvm_2=/var/folders/r5/z3nmn9z10kz22ccrztydswk80000gn/T/protocbridge14106307900279389958, --plugin=protoc-gen-jvm_3=/var/folders/r5/z3nmn9z10kz22ccrztydswk80000gn/T/protocbridge3291260986314496511, --plugin=protoc-gen-play-grpc-client-scala_4=/var/folders/r5/z3nmn9z10kz22ccrztydswk80000gn/T/protocbridge13445907278678428938, --plugin=protoc-gen-play-grpc-server-scala_5=/var/folders/r5/z3nmn9z10kz22ccrztydswk80000gn/T/protocbridge11292358243235635222, --jvm_0_out=/Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/target/scala-2.12/akka-grpc/main, --jvm_0_opt=flat_package, --jvm_1_out=/Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/target/scala-2.12/akka-grpc/main, --jvm_1_opt=flat_package, --jvm_2_out=/Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/target/scala-2.12/akka-grpc/main, --jvm_2_opt=flat_package, --jvm_3_out=/Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/target/scala-2.12/akka-grpc/main, --jvm_3_opt=flat_package, --play-grpc-client-scala_4_out=/Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/target/scala-2.12/akka-grpc/main, --play-grpc-client-scala_4_opt=flat_package, --play-grpc-server-scala_5_out=/Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/target/scala-2.12/akka-grpc/main, --play-grpc-server-scala_5_opt=flat_package, -I/Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/app/protobuf, -I/Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/target/protobuf_external_src, -I/Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/app/proto, -I/Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/target/protobuf_external, /Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/app/protobuf/helloworld.proto]
/Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/app/proto: warning: directory does not exist.
[info] Generating Akka gRPC service interface for example.myapp.helloworld.grpc.GreeterService
[info] Generating Akka gRPC client for example.myapp.helloworld.grpc.GreeterService
[info] Generating Akka gRPC service handler for example.myapp.helloworld.grpc.GreeterService
[info] Generating Play gRPC play client provider for example.myapp.helloworld.grpc.GreeterService
[info] Generated [example.myapp.helloworld.grpc.AkkaGrpcClientModule] add it to play.modules.enabled and a section with Akka gRPC client config under akka.grpc.client."servicepackage.ServiceName" to be able to inject client instances.
[info] Generating Play gRPC service play router for example.myapp.helloworld.grpc.GreeterService
[info] Main Scala API documentation to /Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/target/scala-2.12/api...
[info] Compiling 16 Scala sources and 1 Java source to /Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/target/scala-2.12/classes ...
[info] Non-compiled module 'compiler-bridge_2.12' for Scala 2.12.13. Compiling...
[info]   Compilation completed in 7.878s.
model contains 37 documentable templates
[info] Main Scala API documentation successful.

(Starting server. Type Ctrl+D to exit logs, the server will remain in background)

[jetty-alpn-agent][ warn] Could not find a matching alpn-boot jar for Java version: 11.0.12
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.inject.internal.cglib.core.$ReflectUtils$1 (file:/Users/capitanu/Projects/Personal/Scala/Play/play-samples/play-scala-grpc-example/target/universal/stage/lib/com.google.inject.guice-4.2.3.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of com.google.inject.internal.cglib.core.$ReflectUtils$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
[info] a.e.s.Slf4jLogger - Slf4jLogger started
[info] play.api.Play - Application started (Prod) (no global state)
[info] p.c.s.AkkaHttpServer - Enabling HTTP/2 on Akka HTTP server...
[info] p.c.s.AkkaHttpServer - Listening for HTTP on /127.0.0.1:9000
[info] p.c.s.AkkaHttpServer - Listening for HTTPS on /127.0.0.1:9443
[error] p.a.h.DefaultHttpErrorHandler -

! @7mgcgd9mh - Internal server error, for (GET) [https://localhost:9443/] ->

play.api.UnexpectedException: Unexpected exception[StatusRuntimeException: UNAVAILABLE: io exception
Channel Pipeline: [SslHandler#0, ProtocolNegotiators$ClientTlsHandler#0, WriteBufferingAndExceptionHandler#0, DefaultChannelPipeline$TailContext#0]]
	at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:358)
	at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:264)
	at play.core.server.AkkaHttpServer$$anonfun$2.applyOrElse(AkkaHttpServer.scala:430)
	at play.core.server.AkkaHttpServer$$anonfun$2.applyOrElse(AkkaHttpServer.scala:422)
	at scala.concurrent.Future.$anonfun$recoverWith$1(Future.scala:417)
	at scala.concurrent.impl.Promise.$anonfun$transformWith$1(Promise.scala:41)
	at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:64)
	at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:63)
	at akka.dispatch.BatchingExecutor$BlockableBatch.$anonfun$run$1(BatchingExecutor.scala:100)
	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
Caused by: io.grpc.StatusRuntimeException: UNAVAILABLE: io exception
Channel Pipeline: [SslHandler#0, ProtocolNegotiators$ClientTlsHandler#0, WriteBufferingAndExceptionHandler#0, DefaultChannelPipeline$TailContext#0]
	at io.grpc.Status.asRuntimeException(Status.java:533)
	at akka.grpc.internal.UnaryCallAdapter.onClose(UnaryCallAdapter.scala:40)
	at io.grpc.internal.ClientCallImpl.closeObserver(ClientCallImpl.java:413)
	at io.grpc.internal.ClientCallImpl.access$500(ClientCallImpl.java:66)
	at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInternal(ClientCallImpl.java:742)
	at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInContext(ClientCallImpl.java:721)
	at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
	at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:123)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
Caused by: javax.net.ssl.SSLHandshakeException: General OpenSslEngine problem
	at io.grpc.netty.shaded.io.netty.handler.ssl.ReferenceCountedOpenSslEngine.handshakeException(ReferenceCountedOpenSslEngine.java:1771)
	at io.grpc.netty.shaded.io.netty.handler.ssl.ReferenceCountedOpenSslEngine.wrap(ReferenceCountedOpenSslEngine.java:776)
	at java.base/javax.net.ssl.SSLEngine.wrap(SSLEngine.java:522)
	at io.grpc.netty.shaded.io.netty.handler.ssl.SslHandler.wrap(SslHandler.java:1079)
	at io.grpc.netty.shaded.io.netty.handler.ssl.SslHandler.wrapNonAppData(SslHandler.java:970)
	at io.grpc.netty.shaded.io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1443)
	at io.grpc.netty.shaded.io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1275)
	at io.grpc.netty.shaded.io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1322)
	at io.grpc.netty.shaded.io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:501)
	at io.grpc.netty.shaded.io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:440)
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:439)
	at java.base/sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:306)
	at java.base/sun.security.validator.Validator.validate(Validator.java:264)
	at java.base/sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:313)
	at java.base/sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:276)
	at java.base/sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:141)
	at io.grpc.netty.shaded.io.netty.handler.ssl.ReferenceCountedOpenSslClientContext$ExtendedTrustManagerVerifyCallback.verify(ReferenceCountedOpenSslClientContext.java:261)
	at io.grpc.netty.shaded.io.netty.handler.ssl.ReferenceCountedOpenSslContext$AbstractCertificateVerifier.verify(ReferenceCountedOpenSslContext.java:700)
	at io.grpc.netty.shaded.io.netty.internal.tcnative.SSL.readFromSSL(Native Method)
	at io.grpc.netty.shaded.io.netty.handler.ssl.ReferenceCountedOpenSslEngine.readPlaintextData(ReferenceCountedOpenSslEngine.java:595)
	Suppressed: javax.net.ssl.SSLHandshakeException: error:1000007d:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED
		at io.grpc.netty.shaded.io.netty.handler.ssl.ReferenceCountedOpenSslEngine.sslReadErrorResult(ReferenceCountedOpenSslEngine.java:1287)
		at io.grpc.netty.shaded.io.netty.handler.ssl.ReferenceCountedOpenSslEngine.unwrap(ReferenceCountedOpenSslEngine.java:1248)
		at io.grpc.netty.shaded.io.netty.handler.ssl.ReferenceCountedOpenSslEngine.unwrap(ReferenceCountedOpenSslEngine.java:1324)
		at io.grpc.netty.shaded.io.netty.handler.ssl.SslHandler$SslEngineType$1.unwrap(SslHandler.java:201)
		at io.grpc.netty.shaded.io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1380)
		at io.grpc.netty.shaded.io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1275)
		at io.grpc.netty.shaded.io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1322)
		at io.grpc.netty.shaded.io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:501)
		at io.grpc.netty.shaded.io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:440)
		at io.grpc.netty.shaded.io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276)
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at java.base/sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141)
	at java.base/sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126)
	at java.base/java.security.cert.CertPathBuilder.build(CertPathBuilder.java:297)
	at java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:434)
	at java.base/sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:306)
	at java.base/sun.security.validator.Validator.validate(Validator.java:264)
	at java.base/sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:313)
	at java.base/sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:276)
	at java.base/sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:141)
	at io.grpc.netty.shaded.io.netty.handler.ssl.ReferenceCountedOpenSslClientContext$ExtendedTrustManagerVerifyCallback.verify(ReferenceCountedOpenSslClientContext.java:261)

Once the server started (successfully) with sbt runProd, I issued the curl command from before at which point the exception above was thrown and logged on the server.

openjdk version "11.0.12" 2021-07-20
OpenJDK Runtime Environment Homebrew (build 11.0.12+0)
OpenJDK 64-Bit Server VM Homebrew (build 11.0.12+0, mixed mode)

Hey @borice, since it's been a while, wanted to check in to see if you happen to solve the issue?