如何为搭载Swagger的.NET Core 3.1 Windows Service启用HTTPS协议
.NET Core 3.1 Windows Service 启用HTTPS操作步骤
1. 准备SSL证书
- 测试环境可以直接用.NET Core自带工具生成自签证书,执行命令:
dotnet dev-certs https -ep ./cert.pfx -p 你的证书密码 - 生产环境请申请CA机构颁发的正规SSL证书,导出为带密码的PFX格式即可
2. 配置Kestrel服务监听
你可以选择通过配置文件或者代码两种方式配置HTTPS监听:
方式1:通过appsettings.json配置(推荐,无需改代码)
在项目的appsettings.json中添加Kestrel节点配置,同时保留原HTTP端口或者直接关闭HTTP均可:
{ "Kestrel": { "Endpoints": { "Http": { "Url": "http://localhost:5000" }, "Https": { "Url": "https://localhost:5001", "Certificate": { "Path": "cert.pfx", "Password": "你设置的证书密码" } } } } }
如果使用本地证书存储的证书,可替换Certificate配置为:
"Certificate": { "Store": "My", "Location": "LocalMachine", "Thumbprint": "你的证书指纹", "AllowInvalid": false }
方式2:通过Program.cs代码配置
修改Program.cs中的CreateHostBuilder方法,添加Kestrel的HTTPS配置:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseKestrel(options => { options.ListenAnyIP(5000); // 保留HTTP 5000端口 options.ListenAnyIP(5001, listenOptions => { listenOptions.UseHttps("cert.pfx", "你的证书密码"); }); }); webBuilder.UseStartup<Startup>(); }) // 原有Windows服务配置保留 .UseWindowsService();
3. 配置Swagger适配HTTPS
3.1 启用HTTPS重定向(可选,建议开启)
在Startup.cs的Configure方法中,确保在中间件pipeline靠前位置添加HTTPS重定向:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // 放在其他中间件最前面 app.UseHttpsRedirection(); // 原有其他中间件保留 app.UseRouting(); app.UseAuthorization(); // Swagger配置修改 app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "你的API名称 V1"); c.RoutePrefix = "swagger"; // 可选:强制Swagger使用HTTPS地址发起接口请求 c.AddServer(new OpenApiServer { Url = "https://localhost:5001" }); }); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }
3.2 配置Swagger生成正确的HTTPS接口地址
如果接口调用时出现协议识别错误,可在ConfigureServices中给Swagger添加协议过滤器:
services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "你的API名称", Version = "v1" }); // 强制Swagger生成HTTPS格式的接口地址 c.OperationFilter<HttpsOperationFilter>(); });
4. 部署并重启Windows服务
- 将PFX证书文件放到应用部署目录,确保运行Windows服务的账户拥有证书文件的读取权限;如果使用证书存储,需要给服务账户授予证书私钥的读取权限
- 重新发布项目,重启已部署的Windows服务
5. 验证配置
访问https://localhost:5001/swagger/index.html,确认Swagger界面可以正常打开,接口调用正常。测试环境使用自签证书时浏览器会提示安全风险,手动忽略即可,生产环境使用正规CA证书不会出现该提示。
内容的提问来源于stack exchange,提问作者Akash Gaikwad
相关产品推荐
相关产品推荐

