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 件のコメント:
コメントを投稿