c# - gRPC 服务器 .net 框架 - 如何配置使用 TLS 证书

标签 c# .net grpc grpc-dotnet

我是 gRPC 新手,只是探索 .net 框架服务器中的通信选项。

由于服务器项目的历史和规模,可能需要一段时间才能将这些项目移植到 .net 5+,但我希望允许较新的 .net 5+ 客户端连接,因此想要替换具有当前内容的现有服务器 WCF。

我的 WCF 始终使用 Windows 身份验证进行加密,由于跨域问题,我迫不及待地想摆脱它,因此希望使用 TLS。

我发现很难找到如何执行此操作的示例,尤其是在 .net 框架中,因为大多数示例都是 .net core。

这是一些典型的示例代码:

     static async Task Main()
        {
            const int port = 10042;
            
            var server = new Grpc.Core.Server
            {
                Ports = { new ServerPort("localhost", 10042, ServerCredentials.Insecure) }
            };
            server.Services.AddCodeFirst<ICalculator>(new Calculator());
            server.Services.AddCodeFirst<ITimeService>(new TimeService());
            server.Start();

            Console.WriteLine("server listening on port " + port);
            Console.ReadKey();

            await server.ShutdownAsync();
     }

忽略AddCodeFirst这些是其他一些实验,但是每个示例似乎都使用ServerCredentials.Insecure,并且他们都说不要在生产中使用它(我会不想),但令人沮丧的是他们没有展示如何使用 TLS 证书。我怎样才能做到这一点?

此外,对于.net框架客户端,典型代码是

Channel channel = new Channel("localhost", 10042, ChannelCredentials.Insecure);

唯一的选择似乎是不安全

最后,对于服务器来说,可以使用自签名证书吗?

最佳答案

要将 TLS 与自签名证书结合使用,您需要传递 SslServerCredentials(keyCertPair, caRoots, clientCertRequestType) 实例,而不是 ServerCredentials.Insecure ,如下所示例子 请参阅https://github.com/jtattermusch/grpc-authentication-kubernetes-examples/blob/979345cca801b71eba9f8ffc67e13bf57c33a211/greeter-server/Program.cs#L43来自较早的 gRPC 身份验证谈话 https://github.com/jtattermusch/grpc-authentication-kubernetes-examples .

在客户端,您需要传递相应的 CA 根(另请参阅相同的示例)。

关于c# - gRPC 服务器 .net 框架 - 如何配置使用 TLS 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65030852/

相关文章:

c# - 合并两个列表和一个字典以创建一个字典

kubernetes - 如何基于Istio(Kubernetes)中的路径路由多个gRPC服务

go - Proto3 JSON不将字段名称转换为camelCase

go - 在与 grpc.ClientStreams 交互时是否需要调用 Recv 直到获得 io.EOF?

c# - 在C#Parallel.ForEach中的线程上持久变量

c# - 如何从字符串中获取数字

c# - IIISOle.MimeMapClass 没有构造函数

c# - 在图像中创建可点击区域?

.net - 使用输入的 formaction 属性更改 ajax 表单操作

c# - 如何用一定长度的空行初始化DataTable?