私はC#の方が新しく、TLSでGRPCを使用する必要があります。C#でのGRPCのTLSサポート
ドライランでは、main grpc repoに記載されている例を変更してTLSを使用しています。これを行うには、私は良い答えのように見えるものと別のSOの質問を見つけました:How to enable server side SSL for gRPC?。しかし、エラーUnhandled Exception: Grpc.Core.RpcException: Status(StatusCode=Unavailable, Detail="Connect Failed")
(以下の完全なトレース)が表示されます。
元の非tlsコードで、誤ったポートを指定した場合、またはサーバーを起動しない場合と同じエラーが発生します。私はUbuntuでdotnet coreを使用しています。
コードの重要な部分は次のとおりです。また、フォークのgithubにも記載されています。
クライアント:
var cacert = File.ReadAllText(@"../ca.crt");
var clientcert = File.ReadAllText(@"../client.crt");
var clientkey = File.ReadAllText(@"../client.key");
var ssl = new SslCredentials(cacert, new KeyCertificatePair(clientcert, clientkey));
var channel = new Channel("localhost", 555, ssl);
var client = new Greeter.GreeterClient(channel);
String user = "you";
var reply = client.SayHello(new HelloRequest {Name = user});
Console.WriteLine("Greeting: " + reply.Message);
channel.ShutdownAsync().Wait();
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
サーバー:番組の
var cacert = File.ReadAllText(@"../ca.crt");
var servercert = File.ReadAllText(@"../server.crt");
var serverkey = File.ReadAllText(@"../server.key");
var keypair = new KeyCertificatePair(servercert, serverkey);
var sslCredentials = new SslServerCredentials(new List<KeyCertificatePair>() {keypair}, cacert, false);
var server = new Server
{
Services = {Greeter.BindService(new GreeterImpl())},
Ports = {new ServerPort("0.0.0.0", 555, sslCredentials)}
};
server.Start();
Console.WriteLine("Greeter server listening on port " + Port);
Console.WriteLine("Press any key to stop the server...");
Console.ReadKey();
server.ShutdownAsync().Wait();
全出力:
$ cd GreeterClient
$ dotnet run -f netcoreapp1.0
Unhandled Exception: Grpc.Core.RpcException: Status(StatusCode=Unavailable, Detail="Connect Failed")
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Grpc.Core.Internal.AsyncCall`2.UnaryCall(TRequest msg)
at Grpc.Core.DefaultCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method`2 method, String host, CallOptions options, TRequest request)
at Grpc.Core.Internal.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method`2 method, String host, CallOptions options, TRequest request)
at Helloworld.Greeter.GreeterClient.SayHello(HelloRequest request, CallOptions options)
at Helloworld.Greeter.GreeterClient.SayHello(HelloRequest request, Metadata headers, Nullable`1 deadline, CancellationToken cancellationToken)
at GreeterClient.Program.Main(String[] args)
とサーバ:
$ cd GreeterServer/
$ dotnet run -f netcoreapp1.0
Greeter server listening on port 50051
Press any key to stop the server...
私はいくつかの間違いを犯しましたか?これはWindows以外のマシンでは実行できませんか?何が起こっているのか把握するために問題をデバッグする方法はありますか?
はい、ホストの名前が一致するニーズに接続されていますクライアントチャネルのターゲット(証明書を再生成して一致させる必要があるかもしれません)。 env変数GRPC_VERBOSITY = debugを設定することで、より多くのログを有効にすることにより、より多くの洞察を得ることができます –