gRPC 和 ASP Net Core:GrpcChannel 不支持使用具有非空参数的 SslCredentials

Álv*_*cía 3 c# .net-core grpc asp.net-core

我正在尝试从客户端连接到服务。该服务配置为使用自签名 Ssl 证书,我正在尝试使用客户端证书配置客户端。我正在使用这段代码:

string cacert = System.IO.File.ReadAllText("certificados/ca.crt");
string cert = System.IO.File.ReadAllText("certificados/client.crt");
string key = System.IO.File.ReadAllText("certificados/client.key");

KeyCertificatePair keypair = new KeyCertificatePair(cert, key);
SslCredentials sslCreds = new SslCredentials(cacert, keypair);

var channel = GrpcChannel.ForAddress("https://x.x.x.x:5001", new GrpcChannelOptions { Credentials = sslCreds });
var client = new Gestor.GestorClient(channel);
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:GrpcChannel 不支持将 SslCredentials 与非空参数一起使用。

我不太明白该消息错误。SslCredentials 是 ChannelCredentials 吗?类型,SslCreds 为 Grpc.Core.SslCredentials。它可以编译,所以我猜它的类型是正确的。

我想知道的是如何配置客户端以使用我创建的自签名证书。

谢谢。

Jan*_*sch 5

仅可用 grpc-dotnet 中的 SslCredentials 支持是为了在最常见的用例中提供与 Grpc.Core 的某种程度的兼容性,但它并没有公开所有功能。在 grpc-dotnet 中,仅支持 SslCredentials() (无参数,使用默认根)。如果您想提供自签名凭据,您当然可以这样做,您需要使用不同的 API 来配置 GrpcChannel:

请参阅此处的示例(使用自定义凭据创建 GrpcChannel)。 https://github.com/grpc/grpc-dotnet/blob/dd72d6a38ab2984fd224aa8ed53686dc0153b9da/testassets/InteropTestsClient/InteropClient.cs#L170