gpt4 book ai didi

java - 无法通过 SSL 从客户端使用还原代理 (HAProxy) 连接到 gRPC 服务器

转载 作者:太空宇宙 更新时间:2023-11-03 14:02:36 24 4
gpt4 key购买 nike

在我使用 gRPC Java 的项目中,我使用 OpenSSL 通过还原代理 (HAProxy) 在客户端和服务器之间建立安全连接。

由于客户端和服务器通过还原代理进行交互,因此我只为 HAProxy 配置 SSL,无需对服务器进行任何操作。所以:

  • 客户端 <-> 代理:TLS/SSL
  • 代理 <-> 服务器:原始数据

我设法成功运行服务器并在 HAProxy 上配置了 SSL,我使用 https://www.digicert.com/help/ 检查了 SSL 配置一切正常。

这里的文档提到安全通道的客户端代码是这样的:

ManagedChannel channel = ManagedChannelBuilder.forAddress("myservice.example.com", 443).build();
GreeterGrpc.GreeterStub stub = GreeterGrpc.newStub(channel);

这是我的代码:

channel = ManagedChannelBuilder
.forAddress(domain, port)
.usePlaintext(false)
.build();
interceptChannel = ClientInterceptors.intercept(channel, new ClientHeaderInterceptor());
asyncStub = GatewayServiceGrpc.newStub(channel);
blockingStub = GatewayServiceGrpc.newBlockingStub(interceptChannel);

但问题是我无法连接到服务器,没有响应,也没有抛出任何异常或错误。

但是,如果我将客户端的 usePlaintextfalse 更改为 true(禁用 TLS)并且 Proxy 仍然具有 SSL,那么我会收到此消息异常:

io.grpc.StatusRuntimeException: UNAVAILABLE: Network closed for unknown reason
at io.grpc.Status.asRuntimeException(Status.java:526)
at io.grpc.stub.ClientCalls$StreamObserverToCallListenerAdapter.onClose(ClientCalls.java:385)
at io.grpc.ForwardingClientCallListener.onClose(ForwardingClientCallListener.java:41)
at io.grpc.internal.CensusTracingModule$TracingClientInterceptor$1$1.onClose(CensusTracingModule.java:339)
at io.grpc.internal.ClientCallImpl.closeObserver(ClientCallImpl.java:443)
at io.grpc.internal.ClientCallImpl.access$300(ClientCallImpl.java:63)
at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl.close(ClientCallImpl.java:525)
at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl.access$600(ClientCallImpl.java:446)
at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInContext(ClientCallImpl.java:557)
at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:107)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)

这是客户端的依赖:

<dependencies>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-netty</artifactId>
<version>1.7.0</version>
</dependency>

<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-protobuf</artifactId>
<version>1.7.0</version>
</dependency>

<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-stub</artifactId>
<version>1.7.0</version>
</dependency>

<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-tcnative-boringssl-static</artifactId>
<version>2.0.6.Final</version>
</dependency>

<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>3.3.7</version>
</dependency>

<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>

</dependencies>

我使用的是 gRPC 版本 1.7.0

最佳答案

在创建 channel 时删除 .usePlaintext(false) 将解决问题。

关于java - 无法通过 SSL 从客户端使用还原代理 (HAProxy) 连接到 gRPC 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49293964/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com