如何在docker配置asp.net core https协议

本文参考自Step by step: Expose ASP.NET Core over HTTPS with Docker

  自从微软发布.net core以来,就在许多社区掀起了讨论,笔者也是在工作中开始学习.net core/asp.net core的。说实话,在学习开发asp.net core中,笔者遇到了非常多的问题,踩了许多坑,比如.net core1.1版本中没有提供system.drawing类库,笔者只能借用mono的drawing库来实现一些验证码的绘制;又比如.net core中没有office处理类库,又只能寻找第三方开发的EPPLUS.Core来辅助实现excel的处理。在翻过一座座大山、踩过一个个坑之后,终于到了部署阶段,谁想boss说要在docker上部署https让我彻底懵逼了,度娘上找了半天的没一片文章有用,最后还是找了谷哥才把问题解决,所以才想写篇文章,学习一下。

  对于只想把asp.net core部署在iis或者Kestrel部署的可以参考文章

  《NET Core Kestrel部署HTTPS》

  《ASP.NET Core 1.0 部署 HTTPS (.NET Framework 4.5.1)》

  好,那么进入正题~~

  (1)导入Kestrel Https包

"Microsoft.AspNetCore.Server.Kestrel.Https": "1.0.1"

  (2)program.cs配置https

        public static void Main(string[] args)
        {
            var host = new WebHostBuilder()
                .UseKestrel(opt=> {
                    opt.UseHttps("server.pfx", "123456");
                })
                .UseUrls("https://*:443")
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                .UseStartup<Startup>()
                .Build();

            host.Run();
        }

  在配置文件中,我们设置签名文件名为server.pfx,密码为123456,配置端口为443;由于docker是一个容器,运行环境独立,我们需要在容器中用命令创建签名文件。

  (3)编写Dockerfile文件

  在Dockerfile文件中加入创建签名文件命令

#定义签名密码
ENV certPassword 123456
 
RUN openssl genrsa -des3 -passout pass:${certPassword} -out server.key 2048
RUN openssl rsa -passin pass:${certPassword} -in server.key -out server.key
RUN openssl req -sha256 -new -key server.key -out server.csr -subj '/CN=localhost'
RUN openssl x509 -req -sha256 -days 365 -in server.csr -signkey server.key -out server.crt
RUN openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt -certfile server.crt -passout pass:${certPassword}

  (4)创建docker image

sudo docker build -t httpssample .

  (5)创建容器

//前台运行
sudo docker run -it -p 443:443 httpssample

//后台运行
sudo docker run -t -d -p 443:443 httpssample

  这样就能访问https://localhost/了

posted @ 2017-07-07 12:15  BillMing  阅读(2762)  评论(0编辑  收藏  举报