gRPC 服务器 .net 框架 - 如何配置使用 TLS 证书
gRPC server .net framework - how to configure to use a TLS certificate
我是 gRPC 的新手,正在探索我的 .net 框架服务器中的通信选项。
由于服务器项目的年龄和规模,可能需要一些时间才能将它们移植到 .net 5+,但我想允许更新的 .net 5+ 客户端连接,所以想要用最新的东西替换现有的服务器 WCF。
我的 WCF 一直使用 Windows 身份验证进行加密,由于跨域问题我迫不及待地想要摆脱它,所以想使用 TLS。
我发现很难找到有关如何执行此操作的示例,尤其是在 .net 框架中,因为大多数示例都是 .net 核心。
这是一些典型的(大概)示例代码:
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 framework clients,典型代码是
Channel channel = new Channel("localhost", 10042, ChannelCredentials.Insecure);
唯一的选择似乎是Insecure
最后还有,对于服务器,可以使用自签名证书吗?
要将 TLS 与自签名证书一起使用,您需要传递 SslServerCredentials(keyCertPair, caRoots, clientCertRequestType)
的实例而不是 ServerCredentials.Insecure
的实例,如本例所示
参见 https://github.com/jtattermusch/grpc-authentication-kubernetes-examples/blob/979345cca801b71eba9f8ffc67e13bf57c33a211/greeter-server/Program.cs#L43 from an older gRPC authentication talk https://github.com/jtattermusch/grpc-authentication-kubernetes-examples。
在客户端,您需要传递相应的 CA 根(另见同一示例)。
我是 gRPC 的新手,正在探索我的 .net 框架服务器中的通信选项。
由于服务器项目的年龄和规模,可能需要一些时间才能将它们移植到 .net 5+,但我想允许更新的 .net 5+ 客户端连接,所以想要用最新的东西替换现有的服务器 WCF。
我的 WCF 一直使用 Windows 身份验证进行加密,由于跨域问题我迫不及待地想要摆脱它,所以想使用 TLS。
我发现很难找到有关如何执行此操作的示例,尤其是在 .net 框架中,因为大多数示例都是 .net 核心。
这是一些典型的(大概)示例代码:
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 framework clients,典型代码是
Channel channel = new Channel("localhost", 10042, ChannelCredentials.Insecure);
唯一的选择似乎是Insecure
最后还有,对于服务器,可以使用自签名证书吗?
要将 TLS 与自签名证书一起使用,您需要传递 SslServerCredentials(keyCertPair, caRoots, clientCertRequestType)
的实例而不是 ServerCredentials.Insecure
的实例,如本例所示
参见 https://github.com/jtattermusch/grpc-authentication-kubernetes-examples/blob/979345cca801b71eba9f8ffc67e13bf57c33a211/greeter-server/Program.cs#L43 from an older gRPC authentication talk https://github.com/jtattermusch/grpc-authentication-kubernetes-examples。
在客户端,您需要传递相应的 CA 根(另见同一示例)。