【发布时间】:2019-04-29 12:11:23
【问题描述】:
我正在尝试在 Java 中创建 grpc 服务客户端,其中服务器位于 goLang 中并使用 https 进行部署。我正在尝试实现非安全连接[我不想通过证书]
public class testgrpc {
ManagedChannel channel ;
ServiceGrpc.ServiceBlockingStub blockingStub;
String host = "remotesecuredhost";
int port ="XXX";
@Test
public void testgrpc()
{
channel = ManagedChannelBuilder.forAddress(host,port).build();
blockingStub = ServiceGrpc.newBlockingStub(channel);
response = blockingStub.health(Empty.newBuilder().build());
}
}
上面的代码给出了以下异常
io.grpc.StatusRuntimeException: UNAVAILABLE: io exception
at io.grpc.stub.ClientCalls.toStatusRuntimeException(ClientCalls.java:221)
at io.grpc.stub.ClientCalls.getUnchecked(ClientCalls.java:202)
at io.grpc.stub.ClientCalls.blockingUnaryCall(ClientCalls.java:131)
有人可以帮忙处理客户端代码
【问题讨论】:
-
不想通过证书是什么意思? Go 服务器是否使用自定义 CA 作为其证书?
-
不是自定义的,而是特定于环境的自签名证书
-
或者换句话说我想绕过安全证书步骤,这可能吗?
-
gRPC 强烈反对忽略证书,并且不“支持”忽略证书,因为这使得它实际上不安全;明文更容易使用。我们发现没有必要的用例,即使是使用 TLS 进行测试也是如此。在 Java 中可以通过提供您自己的 TrustManager 来实现,例如 Netty 的 InsecureTrustManagerFactory,但是在使用它时“您只能靠自己”。在您的情况下,您可以在服务器上使用硬编码的证书,仍然可以获得相同的效果,这将保持启用证书验证。
-
我在 go lib --- conn, err := grpc.Dial(serverAddress, grpc.WithInsecure()) 中看到了这段代码,它还需要验证证书吗?您能帮忙处理一下 trustmanager 代码示例吗?
标签: java ssl go grpc grpc-java