我是 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/