我在.NET Core服务器上使用protobuf-net.Grpc,并尝试从.NET Framework(4.7.2。)gRPC客户端进行调用。完整的示例在这里:https : //github.com/angelagyang/GRPCProtobufExample
这是我的客户的摘要:
var channelCreds = new SslCredentials(GetRootCertificates());
var channel = new Channel("localhost", 5001, channelCreds);
var greeter = channel.CreateGrpcService<IGreeterService>();
使用这种配置,我StatusCode="Unknown", Detail="Stream removed"...
在调用服务器时收到错误消息。如果我ClientCertificateMode = ClientCertificateMode.NoCertificate
在服务器上进行设置,则可以连接到服务器。但是,我希望服务器需要客户端证书,并通过thumbprint验证证书。
例如,在.NET Core中,我可以使用Grpc.Net.Client来配置我的频道,如下所示:
var handler = new HttpClientHandler();
handler.ClientCertificates.Add(certificate);
var channel2 = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions
{
HttpHandler = handler
});
有没有办法像这样在.NET Framework中用证书配置客户端?我是gRPC / .NET的新手,希望你能提出任何建议!
解决并更新了原始示例:https : //github.com/angelagyang/GRPCProtobufExample
你可以通过创建KeyCertificatePair
传入来配置客户端证书SslCredentials
。你将需要PEM编码的证书链和PEM编码的私钥。
var keyCertPair = new KeyCertificatePair(File.ReadAllText($"{rootDir}/cert.pem"), File.ReadAllText($"{rootDir}/cert.key"));
var channelCreds = new SslCredentials(GetRootCertificates(), keyCertPair);
为了进行测试,我在这里使用了自签名证书:https : //github.com/grpc/grpc/tree/master/src/core/tsi/test_creds
调试时,设置GRPC_VERBOSITY = DEBUG
和GRPC_DEBUG = ALL
。这可以帮助清除模糊的错误消息。例如,我意识到我用来配置HTTPS的服务器证书不包含localhost。