我有一种正在以这种方式配置的服务:
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无法建立稳定的连接。
因此,我的疑问是,有某种方法可以将服务设置为不允许这种连接?否则,任何人都可以创建忽略此身份验证的客户端,并且安全性毫无意义。
谢谢。
如果您将客户端配置为接受任何服务器证书,则该证书在其根之前是否有效,都不会“忽略身份验证”-首先没有身份验证。