Caddy proxy asp.net core 3 kestrel grpc webapp
开发环境
Caddy Server
caddy_v1.0.0_windows_amd64
.net core 3
dotnet-sdk-3.0.100-preview4-011223-win-x64
openssl
Win64OpenSSL-1_1_0j.exe
system win 10 pro
结构流程
- grpc on kestrel server https://localhost:50051
- grpc client request call grpc on caddy proxy https://localhost:8080
- CaddyServer //https://localhost:8080
grpc client(H2-TLS 协议) 访问 –> CaddyServer –> 反向代理(H2-TLS 协议) –> grpc on kestrel server
这里主要记录 部署过程 grpc 项目 使用 标准 模板 helloworld
grpc on kestrel server 配置
运行 vs2019 pre 2 内置的模板创建 一个 .net core grpc 项目
项目创建完成后 你就有一个 跑在 kestrel 上的 grpc server了
CaddyServer Http/2 反代协议 需要 kestrel 跑在 TLS https 下 如果kestrel 跑在http 下 Caddy会自动降级 http1 处理反代协议,所以 我们需要先把 本地 dotnet dev cert 证书 导入kestrel 我们先把
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
//webBuilder.UseUrls("https://localhost:50051")
webBuilder.ConfigureKestrel(options =>
{
options.Limits.MinRequestBodyDataRate = null;
options.Listen(IPAddress.Any, 50051, listenOptions =>
{
listenOptions.Protocols = Microsoft.AspNetCore.Server.Kestrel.Core.HttpProtocols.Http2;
//我们使用ASP.NET核心开发证书
listenOptions.UseHttps();
//或者我们可以使用.pfx格式的自己的证书 X509Certificate2
//listenOptions.UseHttps(cert);
});
});
webBuilder.UseSerilog();
webBuilder.UseStartup<startup>();</startup>
});
这里 grpc kestrel server 已经配置完成 可以通过 vs 拉起 黑屏运行了
CaddyServer 配置
Caddyfile 配置
主要就是加载 pem 证书 配置比较简单 直接贴 Caddyfile 了
https://localhost:8080
tls ../localhostpubliccert.pem ../localhostprivatekey.pem
proxy / https://localhost:50051 {
}
grpc client 实现
grpc client 需要修改的是 默认Channel 使用了 非 TLS 安全传输访问通道 我们需要 修改成 加载证书的版本
//Channel channel = new Channel(“localhost:50051”, ChannelCredentials.Insecure);
string rootpath = AppDomain.CurrentDomain.BaseDirectory;
var filepath = Path.Combine(rootpath, "localhostdevcert.pem");
string pem = File.ReadAllText(filepath);
SslCredentials secureCredentials = new SslCredentials(pem);
Channel secureChannel = new Channel("localhost", 8080, secureCredentials);
var client = new Greeter.GreeterClient(secureChannel);
openssl 转换 localhsot 开发证书 格式
- 开发证书安装
dotnet dev-certs https –trust - 通过 MMC 导出 开发证书 保存成 .pfx 二进制的证书文件
安装 openssl 工具 转换 证书的格式 CaddyServer 需要 pem 格式的证书
证书和私钥
openssl pkcs12 -in d:\localhostdevcert.pfx -out d:\localhostdevcert.pem -nodes
私钥
openssl pkcs12 -in d:\localhostdevcert.pfx -nocerts -out d:\localhostprivatekey.pem -nodes
证书
openssl pkcs12 -in d:\localhostdevcert.pfx -nokeys -out d:\localhostpubliccert.pem -nodes
demo 源码
github rep
ps 引用参考
开发证书
Protocols in ASP .NET Core: HTTPS and HTTP/2