gpt4 book ai didi

c# - 配置 ASP.NET Core gRPC 以在服务器和客户端上使用 SSL/TLS

转载 作者:行者123 更新时间:2023-12-02 01:58:03 25 4
gpt4 key购买 nike

这是我的问题:如何使用适用于 gRPC 的 ASP.NET Core API 在服务器和客户端上建立 SSL/TSL?

我在互联网上搜索了有关如何配置 gRPC 以使用 TLS 的文档。我可以找到一些发布了“解决方案”的人,但我个人认为他们正在破解它以使其发挥作用。

当我查看 Microsoft gRPC 文档以及相关的 ASP.NET Core 文档时,我知道有许多 API 可以执行我需要让它们执行的操作。我只是找不到任何关于如何使用它们的文档。我知道是什么,只是不知道怎么做。

我要部署两种类型的服务器。其中一个“服务器”也将是网状网络拓扑中的客户端。一台服务器将面向外部并具有公共(public) IP 地址。其他服务器将部署在个人的个人计算机上。我完全不知道我需要使用什么类型的证书。我想我可以使用我发现的其中一个技巧让它工作。其他服务器,我不知道该怎么办。

我使用了 Microsoft 发布的教程:“在 ASP.NET Core 中创建 gRPC 客户端和服务器”和“使用 ASP.NET Core 的 gRPC 服务”,并且能够使简单的本地主机 Kestrel SSL 配置正常工作。现在,我需要使用真实的证书。

最佳答案

有一个 Mutual-SSL/TLS-Example 如何将 gRPC-AspNetCore-Server 与 native Grpc.Core.Client 和托管 Grpc.Net.Client 一起使用> 在 my OpenSource Project .

只需导航到 .\SiLA2.gRPC.CSharp\Examples\TemperatureController

AspNetCore.服务器:

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
webBuilder.ConfigureKestrel(opt =>
{
//### Option ListenLocalhost can be used for native Grpc.Core-Clients by http -> SslCredentials.Insecure #######
//###############################################################################################################
opt.ListenLocalhost(13745, o => o.Protocols = HttpProtocols.Http2);//############################################
//###############################################################################################################

var config = (IConfiguration)opt.ApplicationServices.GetService(typeof(IConfiguration));
var cert = new X509Certificate2(config["Certificate:File"],
config["Certificate:Password"]);

opt.ConfigureHttpsDefaults(h =>
{

h.ClientCertificateMode = ClientCertificateMode.AllowCertificate;
h.CheckCertificateRevocation = false;
h.ServerCertificate = cert;
});
});
});

启动.cs:

public void ConfigureServices(IServiceCollection services)
{
services.AddGrpc(x => x.EnableDetailedErrors = true);
services.AddAuthentication().AddCertificate(opt =>
{
opt.AllowedCertificateTypes = CertificateTypes.SelfSigned;
opt.RevocationMode = X509RevocationMode.NoCheck; // Self-Signed Certs (Development)
opt.Events = new CertificateAuthenticationEvents()
{
OnCertificateValidated = ctx =>
{
// Write additional Validation
ctx.Success();
return Task.CompletedTask;
}
};
});

Grpc.Net.Client :

var cert = new X509Certificate2(_configuration["Service:CertFileName"]);
var handler = new HttpClientHandler();
handler.ServerCertificateCustomValidationCallback =
HttpClientHandler.DangerousAcceptAnyServerCertificateValidator;
handler.ClientCertificates.Add(cert);
var client = new HttpClient(handler);
var opt = new GrpcChannelOptions()
{
HttpClient = client,
LoggerFactory = serviceProvider.GetService<ILoggerFactory>()
};

var channel = GrpcChannel.ForAddress(_configuration["Connection:gRPCServerHostURI"], opt);
var siLA2ServiceClient = new SiLAService.SiLAServiceClient(channel);

Grpc.核心.客户端:

class Program
{
const string HOST = "localhost";

static void Main(string[] args)
{
const int SECURE_PORT = 13746;
const int INSECURE_PORT = 13745;

try
{
Console.WriteLine($"{Environment.NewLine}Sending Server-Name-Request SiLA2 Server by Native gRPC-Client...");
GetServerResponse(SECURE_PORT, new SslCredentials(File.ReadAllText($"SiLA2DevExampleSelfCert2.pem")), "Sending secure (https) Server-Name-Request SiLA2 Server by Managed gRPC-Client ");
GetServerResponse(INSECURE_PORT, ChannelCredentials.Insecure, "Sending unencrypted (http) Server-Name-Request SiLA2 Server by Native gRPC-Client by http ");
}
catch (RpcException e)
{
Console.WriteLine(e);
}
Console.ReadKey();
}

private static void GetServerResponse(int port, ChannelCredentials sslCredentials, string requestText)
{
var channel = new Channel($"{HOST}:{port}", sslCredentials);
Console.WriteLine($"{Environment.NewLine}{requestText} ({channel.Target})");
var silaService = new SiLAServiceClient(channel);
var response = silaService.Get_ServerName(new Get_ServerName_Parameters());
Console.WriteLine($"{Environment.NewLine}Response from SiLA2 Server : {response.ServerName}");
}
}

关于c# - 配置 ASP.NET Core gRPC 以在服务器和客户端上使用 SSL/TLS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69384807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com