2016-05-12 5 views
1

私のプロジェクトではgrpcとjavaを使用していますが、OpenSSLを使ってクライアントとサーバを安全に接続しています。SSLを介してクライアントからgrpcサーバに接続できません

grpcサーバーを正常に起動できました。

安全なチャネルのためのクライアントコードは、この

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

で次のように私は、クライアントでのコードを使用していますが、以下の例外がスローされていることを言及しhereドキュメント。

mChannel = ManagedChannelBuilder.forAddress(GrpcConstants.LOCAL_GRPC_CLIENT_IP, GrpcConstants.LOCAL_GRPC_CLIENT_PORT).build(); 

    mEmployerServicesBlockingStub = EmployerServicesGrpc.newBlockingStub(mChannel); 
    mInviteContactsBlockingStub = InviteContactsGrpc.newBlockingStub(mChannel); 

例外:

Network channel closed 
    at io.grpc.Status.asRuntimeException(Status.java:431) 
    at io.grpc.stub.ClientCalls.getUnchecked(ClientCalls.java:157) 
    at io.grpc.stub.ClientCalls.blockingUnaryCall(ClientCalls.java:106) 

Iはまた、次のコードと試みた:

mChannel = NettyChannelBuilder.forAddress(GrpcConstants.LOCAL_GRPC_CLIENT_IP, GrpcConstants.LOCAL_GRPC_CLIENT_PORT).sslContext(GrpcSslContexts.forClient().trustManager(file).build()).build(); 

    mEmployerServicesBlockingStub = EmployerServicesGrpc.newBlockingStub(mChannel); 
    mInviteContactsBlockingStub = InviteContactsGrpc.newBlockingStub(mChannel); 

これも上記と同様の例外を与えています。私はちょうどnullファイル参照をここで与えました。

GoDaddy証明書にどのアプローチを使用するか教えてください。

最初のアプローチであれば、何が欠けているのですか。

2番目の方法であれば、どのファイルを "roots.pem"に使用するのですか。

更新されました。

答えて

0

例外が上に少し切り取られているようです。また、因果関係の例外(「原因:」)がある可能性があります。どちらの場合でも、これはanother issueと似ている可能性があります。ここで、gRPCは元のエラーを「ミス」し、後の失敗を検出するだけです。

チャネル作成のどちらの方法も有効です。リバースプロキシを使用している場合は、問題はAES GCMまたはALPN(HTTP/2)をサポートしていないサーバーだと思います。 https://www.ssllabs.com/ssltest/を使用してサポートを確認することができます。たとえば、Google supports bothです。 gRPCサーバーに直接接続している場合は、tcnativeを初期化する際に問題が起こると思います。

GitHubの問題を作成して、真の原因を突き止めるのに役立つかもしれません。

+0

お返事ありがとうございます。 grpcのドキュメントでSSL用に与えられたコードを使って、クライアント側の.crtファイルとサーバー側の秘密鍵とサーバー.crtファイルを渡して、正常に接続できました。 –

+0

まだ別の問題がありました。クライアントは例外を出すことも、サーバーに到達することもありませんでした。何とかSSL用の同じコードがgrpc-java githubサンプルプロジェクトによって成功しました。私のプロジェクトからgrpc-javaのサンプル実装への唯一の違いは、osdetectorのバージョンです。この[issue](http://stackoverflow.com/questions/37160085/gradle-not-able-to-detect-osdetector-plugin)のためにosdetector 1.4.0を含めることができませんでした。 grpc-javaは1.4.0でしたが、graleビルド中にskipcodegen = true paramを使用して正常にビルドしていました。 –

+0

@DivijeNarasimhachar、私はosdetectorバージョンが問題であるとは思わない。私が持っている唯一のアイデアは、サーバー側で間違ったSslContext: 'GrpcSslContexts.forClient()'を使用しているか、クライアント側で 'GrpcSslContexts.forServer()'を使用しているということです。それはタイプミスとして気づくのは本当に難しいですし、私はハングアップの原因を聞いたことがあります。 –

関連する問題