Ang*_*ang 6 .net c# protobuf-net .net-core grpc
我在 .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>();
Run Code Online (Sandbox Code Playgroud)
StatusCode="Unknown", Detail="Stream removed"...使用此配置,我在调用服务器时收到错误。如果我在服务器上设置,我就可以连接到服务器ClientCertificateMode = ClientCertificateMode.NoCertificate。但是,我希望服务器需要客户端证书并通过指纹验证证书。
例如,在 .NET Core 中,我可以使用 Grpc.Net.Client 来配置我的通道,如下所示:
var handler = new HttpClientHandler();
handler.ClientCertificates.Add(certificate);
var channel2 = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions
{
HttpHandler = handler
});
Run Code Online (Sandbox Code Playgroud)
有没有办法像这样在 .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);
Run Code Online (Sandbox Code Playgroud)
出于测试目的,我在这里使用了自签名证书:https://github.com/grpc/grpc/tree/master/src/core/tsi/test_creds
调试时,设置GRPC_VERBOSITY = DEBUG和GRPC_DEBUG = ALL。这可以帮助清除模糊的错误消息。例如,我意识到我用来配置 HTTPS 的服务器证书不包括 localhost。
| 归档时间: |
|
| 查看次数: |
7131 次 |
| 最近记录: |