SSL証明書の作成
SSL証明書が必要になります。crt, csr, key ファイルを作成します。今回は OpenSSL を使用して「オレオレ証明書」を作成しました。次のサイトが分かりやすかったです。
[Windows] OpenSSLによる自己署名証明書の作成 | うつしよ
localhost でテストを行う場合、Common Name に localhost を指定します。ホスト名が異なる場合、クライアントからサービスに接続しようとしたときに E0113 No match found for server name というエラーが発生します。
サービス用とクライアント用の証明書を作成しました。
- testServer.crt, testServer.csr, testServer.key
- testClient.crt, testClient.csr, testClient.key
サービス側の実装
チャネルのコンストラクタに SslServerCredentials を渡します。CA証明書にはtestServer.crt を使用しました。
using Grpc.Core; using System.IO; string cacert = File.ReadAllText("testServer.crt"); string servercert = File.ReadAllText("testServer.crt"); string serverkey = File.ReadAllText("testServer.key"); KeyCertificatePair keypair = new KeyCertificatePair(servercert, serverkey); SslServerCredentials credentials = new SslServerCredentials( new List() { keypair }, cacert, false ); Server server = new Server(); server.Ports.Add("localhost", 8080, sslCredential);
クライアント側の実装
チャネルのコンストラクタに SslCredentials を渡します。CA証明書にはtestServer.crt を使用しました。
using Grpc.Core; using System.IO; string cacert = File.ReadAllText("testServer.crt"); string clientcert = File.ReadAllText("testClient.crt"); string clientkey = File.ReadAllText("testClient.key"); SslCredentials sslCredential = new SslCredentials( cacert, new Grpc.Core.KeyCertificatePair(clientcert, clientkey) ); Channel channel = new Channel("localhost:8080", sslCredential); TestServiceClient client = new TestServiceClient(channel);
0 件のコメント:
コメントを投稿