使用SslContextBuilder的gRPC SSL连接-SunCertPathBuilderException

问题描述

我有一个Java(春季启动)应用程序,它使用TLS通过gRPC调用(Dgraph)数据库

我有以下代码在我的产品(docker,k8s)环境中成功建立SSL连接。我还通过“直接”运行客户端代码(即从IDE运行main方法)并将该服务作为容器在本地成功运行。

      SslContextBuilder builder = GrpcSslContexts.forClient();
      builder.trustManager(getCertFile("ca.crt",dgraphCaCert));

      // Performing client verification
      builder.keyManager(
          getCertFile("client.testing.crt",dgraphClientCert),getCertFile("client.testing.java.key",dgrapghClientKey));
      SslContext sslContext = builder.build();

      log.info("dgraphHost {} dgraPHPort {}",dgraphHost,dgraPHPort);

      managedChannel =
          NettyChannelBuilder.forAddress(dgraphHost,dgraPHPort).sslContext(sslContext).build();

一切都很好。但是,当我在本地将应用作为容器运行时,出现错误

certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

有什么提示吗? 研究中,我认为这是一个足够普遍的问题,解决方案是将证书添加到客户端的密钥库中。但是,这使我感到困惑,就像在prod中工作时一样,或者当我直接运行所有文件时-并假设这是SslContextBuilder的目的,即不让应用程序/ env“手动”添加证书。

谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...