开发NetCore部署到Docker中遇到不能使用Https的奇怪情况,查询网上并没有找到合适的方法,通过对比分析已解决这个问题,现记录下来.
表现情况为:
程序运行方式 | 80端口(HTTP) | 443端口(HTTPS) |
---|---|---|
IIS调试或运行 | 正常 | 正常 |
控制台调试或运行 | 正常 | 正常 |
VS中通过Docker调试 | 正常 | 正常 |
VS中通过Docker调试后,当停止调试,"容器"中的镜像并没有中止 | ||
1.停止调试后,镜像未停止 | 正常 | 404 |
2.直接生成镜像并发布 | 正常 | 404 |
关键问题在以Docker形式运行,不能使用443端口,准确的说是不能以HTTPS方式来访问.
一开始还以为是没有开启https,在Program中添加webBuilder.UseUrls("https://*:443");发现并没有作用.
后来经过反复测试发现是没加证书文件.
按网上知识,netcore使用证书有两种方法:
1.在Program中添加(但我使用此方法问题依旧)
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseUrls("https://*:443");
webBuilder.ConfigureKestrel(options =>
{
options.Listen(IPAddress.Loopback, 443,
listenOptions => { listenOptions.UseHttps("socialnetwork.pfx", "xxx"); });
});
webBuilder.UseStartup<Startup>();
});
2.在appsettings.json中添加
"Kestrel": {
"Endpoints": {
"HttpsInlineCertFile": {
"Url": "https://*:443",
//"Protocols": "Http2",
"Certificate": {
"Path": "socialnetwork.pfx",
"Password": "xxx"
}
}
}
}
添加证书不要忘了将证书也打包进Docker,经过上述修改,不管是Docker本地调试还是部署到服务器中都能够正常使用Https了.
这里用到的socialnetwork.pfx是我自己创建的证书,Password是创建证书时设置的密码.
生成证书的方法有很多,我参考的是这篇
https://www.cnblogs.com/liuxiaoji/p/10790057.html
部署到生产环境还是正规点好.
完.