gpt4 book ai didi

c# - 如何将 .NET 框架中的 gRPC 客户端与安全的 .NET Core 服务器连接?

转载 作者:行者123 更新时间:2023-12-03 23:45:55 25 4
gpt4 key购买 nike

我在 .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,我就可以连接到服务器在服务器上。 但是,我希望服务器为 require a client certificate and validate the certificate via thumbprint .
例如,在 .NET Core 中,我可以使用 Grpc.Net.Client 像这样配置我的 channel :
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 = DEBUGGRPC_DEBUG = ALL .这可以帮助清除模糊的错误消息。例如,我意识到我用来配置 HTTPS 的服务器证书不包含 localhost。

关于c# - 如何将 .NET 框架中的 gRPC 客户端与安全的 .NET Core 服务器连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62803003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com