(The Continued Rising Power of Developers)

使用HTTPS,让网站更安全

PS:经过两周的学习和部署迁移,目前已经把所有后端都迁到了基于Docker的Jenkins里了,相关文章可以参考《使用Jenkins来发布和代理.NetCore项目》,当然我也在纠结要不要也把vue的前端项目也迁过来,这样每次只需要动动手就可以实现持续集成和持续部署了,如果你想了解如何vue项目构建镜像,看我的这个《Docker 部署VUE项目》

今天就用mvp项目做例子,虽然是BlazorServer的项目,但是本质上还是MVC项目,所以如果你的项目是MVP的,同理可得

不知道docker和Jenkins的相关内容,你学会了么?

1、两种方案来加锁

现在网站基本上已经普及了HTTPS化,虽然不能拦截所有,不过通过简单的配置也能起到很大的作用,所以,HTTPS模式一直也是被大众所接受,我现在在线的10个项目中,主要是官网,认证中心做了安全协议的配置,关于如何进行安全配置,这里有两个方案:

1、普通模式:直接在代理服务器中,配置证书,做HTTPS代理,常见的就是在Nginx中处理,我的官网和认证中心都是这么处理的,而且也对Http做了跳转,访问域名,无论是HTTP还是HTTPS的,统一都是运行HTTPS安全协议下的,相应的Nginx配置也很简单,之前也写过文章《mvc项目加个锁》。

配置文件查看链接:

http://apk.neters.club/.doc/guide/function-sheet.htm

2、项目中配置:上边的方案虽然可以满足一定的需求,但是有一个问题,比如我们用HTTPS安全协议的MVC项目做客户端,去调用认证中心的时候(这里的ids4项目也是https安全协议的),MVC客户端是不能用第一种方案的,因为第一种方案本质上还是通过nginx路由强制跳转的。所以如果用第一种方案的话,我们发起认证的时候会报错,比如客户端无效或者参数不对。那这个时候我们就需要把我们的MVC客户端,直接配置HTTPS模式的,也就是在项目内部配置的,这个也是今天要说的重点。

那接下来咱们就说下,如何把项目用HTTPS模式启动。

2、项目中配置HTTPS模式

这个是很简单的,只需要简单配置下启动服务就行。

首先就是注册相应的服务,基本自己不需要怎么修改,对于下边的AddHttpsRedirection你可以酌情处理,一般仅仅是生产模式使用就行。

 // 配置Hstsservices.AddHsts(options =>{options.Preload = true;options.IncludeSubDomains = true;options.MaxAge = TimeSpan.FromDays(60);options.ExcludedHosts.Add("mvp.neters.club");});// 非开发环境if (!_env.IsDevelopment()){services.AddHttpsRedirection(options =>{options.RedirectStatusCode = StatusCodes.Status308PermanentRedirect;options.HttpsPort = 443;}); }

然后配置中间件

 if (!env.IsDevelopment()){app.UseHsts();}app.UseHttpsRedirection();

其他的就不需要处理了,本地测试一看,没有什么问题

如果说你仅仅使用Linux+Nginx的话,应该就是到了这里了,毕竟已经启动了HTTPS安全模式了,配置好代理就可以起飞了,但是本文要说的就是Docker。

3、在Docker中测试

可是我们都知道,如果你使用Docker的话,容器内部是没有localhost的,因为是用的IPv6,那这种配置就是不行。而且如果不配置的话,容器内默认启动的是http协议的80端口,这个和我们的需求不一样,我们需要的是直接启动https的:

那怎么办呢,如果你看过我之前的讲解,可能就想到了,我们可以在Program里直接配置域名,可以达到目的:

Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>().UseUrls("https://*:443") // 手动指定https;});

这样看起来,按理说这回应该就没有问题了吧,提交到Docker来看看

竟然还报错了你看????

System.InvalidOperationException: Unable to configure HTTPS endpoint. No server certificate was specified, and the default developer certificate could not be found or is out of date.
To generate a developer certificate run 'dotnet dev-certs https'. To trust the certificate (Windows and macOS only) run 'dotnet dev-certs https --trust'.

其实定心一看,应该也能明白发生了什么,就是在Docker中这么启动HTTPS的话,是不允许的,因为没有服务证书,本地vs开发肯定不会有这个问题,这就是环境的差异性。

这个就是今天的重点问题出现了,在Docker中如何合理配置安全证书HTTPS。也咨询了下别人,有的建议直接用k8s,有的说直接用Linux,不用Docker,我想着应该不会这么尴尬的,那到底该如何配置呢,其实是很简单的。

4、配置https证书

那既然需要证书,我们就生成一个证书,方案有很多,你可以去某云上申请免费的证书,也可以使用openssl工具来生成自己的,生成的过程略,自行百度很简单。

但是这样的话,放到公网也是不行,毕竟自己创建的没啥用,除非你用自建的放项目里,用nginx再代理正式的。

所以还是要正规的,这里我用某讯云的上的pfx来处理。

现在有了正式,就需要配置端口监听了,直接配置kestrel:

 public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>().ConfigureKestrel(options =>{options.Listen(IPAddress.IPv6Any, 443, listenOptions =>{listenOptions.UseHttps(Path.Combine(AppContext.BaseDirectory, "socialnetwork.pfx"), "123456");});})//.UseUrls("https://*:443");});

注意这里的监听方式用的是IPv6Any,端口443,然后下边配置路径和密码,这个证书反正是假的,你自己的可要保护好。

如果想要看更多详细的内容,可以看官方的issue:

https://github.com/dotnet/AspNetCore.Docs/issues/6199

那现在提交上去,再来看看

没有问题了,撒花,基于IPv6的端口是443的容器,当然你也可以自定义修改端口。

剩下的就是映射到宿主机端口。

docker run --name=mvpcontainer -d \
-v /etc/localtime:/etc/localtime -it \
-p 5050:443 laozhangisphi/mvpimg

然后正常的nginx代理5050,刷新页面,一切正常。

https://mvp.neters.club


总结:

1、配置Startup.cs;
2、生成证书;
3、配置kestrel监听端口;

在Docker中配置ASP.NETCore的HTTPS模式相关推荐

  1. docker 中配置网易镜像

    要在 Docker 中配置网易镜像,需要完成以下步骤: 打开 Docker 客户端. 在命令行中输入以下命令,以下载网易镜像加速器地址: sudo curl -sSL https://get.daoc ...

  2. Apache中配置ASP.NET环境

    Apache中配置ASP.NET环境 前提已经搭配好Apache环境 下载安装      2mod_aspdotnet-2.0.0.msi(到这里下载http://httpd.apache.org/m ...

  3. 在docker中配置apt工具与python的源均为国内源

    在docker中配置apt工具与python的源均为国内源 1.准备并进入一个docker容器 本文主要包含一些常用的配置方法.包括在docker中配置系统源.python源. 打开 linux 终端 ...

  4. 在Docker中部署Asp.net core2.1以及修改发布

    本篇文章主要是如何在Docker容器中运行ASP.NET Core应用程序,以及修改系统之后,发布更新.本文章采用自定义的Docker文件 系统要求: 1.服务器或本地已经安装docker 一.创建一 ...

  5. 在Docker中运行ASP.NET Web API解决方案

    目录 介绍 先决条件 如何容器化现有项目 添加docker-compose项目 带有docker-compose的容器化解决方案 添加环境变量 后端 前端 不使用Visual Studio运行您的应用 ...

  6. 在Docker中运行asp.net core 跨平台应用程序

    概述 Docker已经热了有一两年了,而且我相信这不是一个昙花一现的技术,而是一个将深远影响我们日后开发和部署.运营应用系统的一种创新(很多人将其作为devops的一种非常重要的基石).学习docke ...

  7. 在docker中配置defects4j基准测试集

    前言 本文旨在记录--如何在docker的Ubuntu镜像下配置defects4j 1.2.0 (最新版本,此时时间:2018-09-16). 一.配置过程 1)先要在docker下安装Ubuntu( ...

  8. 在Win 2003中配置ASP.net环境

    作者:未知 大家知道,Microsoft为了更好地预防恶意用户和攻击者的攻击,在默认情况下,没有将 IIS6.0 安装到 Windows Server 2003 家族的成员上.而且,当我们最初安装 I ...

  9. 在docker中运行ASP.NET Core Web API应用程序

    本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述.对于.NET Cor ...

最新文章

  1. File errorchecker.pyx, line 17, in OpenGL_accelerate.errorchecker._ErrorChecker.__init__ (src\erro
  2. 大数据洞察画像自动化实践
  3. OpenCASCADE绘制测试线束:拓扑命令之历史命令
  4. Bugku-CTF之你必须让他停下+头等舱
  5. 基于ABP落地领域驱动设计-05.实体创建和更新最佳实践
  6. python下载文件暂停恢复_Python关于Threading暂停恢复解决办法
  7. 一个用户的上级部门的上级部门对用户也有修改权限,怎么判断?
  8. Linux双网关配置(电信网通)
  9. 现代通信原理2.1:谈谈信号
  10. JSP实现学生管理系统
  11. 公司java项目上线生产环境发布流程
  12. linux环境下如何重装系统,详细教你linux电脑系统怎么安装
  13. 数学公式编辑器mathtype安装包免费版下载
  14. postgresql集群方案hot standby初级测试(四)——xlog详细解释header
  15. 假设检验 - 区间估计(总体标准差未知)
  16. Python容器:列表、元组、字典与集合
  17. 1000瓶毒药,小白鼠测毒问题
  18. win11,google chrome没有声音怎么办
  19. Syslinux使用
  20. BZOJ#3267. KC采花

热门文章

  1. 4. ZooKeeper 基本操作
  2. [BZOJ]1095 Hide捉迷藏(ZJOI2007)
  3. [转] ArcEngine 产生专题图
  4. 查看linux版本的三种常用方法
  5. iptables (2) 基本配置
  6. cocos2d-x 3.0rc2中读取sqlite文件
  7. jQuery入门[2]-选择器[转]
  8. MVC身份验证及权限管理(转载)
  9. 点击右侧导航栏,实现iframe嵌入子页面中div,滑动到最上面
  10. 利用bootstrap插件设置时间