gRPC中的安全性如何运作?

问题描述 投票:0回答:1

我有一种正在以这种方式配置的服务:

options.Listen(miAddress, 5001, l =>
{
    l.Protocols = HttpProtocols.Http2;
    System.Security.Cryptography.X509Certificates.X509Certificate2 miCertificado = new System.Security.Cryptography.X509Certificates.X509Certificate2(@"certificados\service.crt");
    l.UseHttps(miCertificado);
});

但是如果我意识到可以使用此代码配置客户端以避免身份验证:

var httpClientHandler = new System.Net.Http.HttpClientHandler();
httpClientHandler.ServerCertificateCustomValidationCallback =
    System.Net.Http.HttpClientHandler.DangerousAcceptAnyServerCertificateValidator;
var httpClient = new System.Net.Http.HttpClient(httpClientHandler);

var channel = GrpcChannel.ForAddress(_serviceAddress,
    new GrpcChannelOptions { HttpClient = httpClient });
var client = new Gestor.GestorClient(channel);

在这种情况下,身份验证将被忽略,我可以使用对服务的调用。

[我知道这会忽略身份验证,因为如果尝试使用客户端来使用证书,则会收到一条错误消息,指出由于SSL无法建立稳定的连接。

因此,我的疑问是,有某种方法可以将服务设置为不允许这种连接?否则,任何人都可以创建忽略此身份验证的客户端,并且安全性毫无意义。

谢谢。

c# grpc
1个回答
0
投票
使用HTTPS与使用身份验证不同。您要做的只是加密客户端和服务器之间的流量,以使窃听者无法读取您的纯文本流量。

如果您将客户端配置为接受任何服务器证书,则该证书在其根之前是否有效,都不会“忽略身份验证”-首先没有身份验证。

© www.soinside.com 2019 - 2024. All rights reserved.