您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

ASP.NET Core和Https

时间:2020-03-26 11:24:46  来源:  作者:

合格的web后端程序员,除搬砖技能,还必须会给各种web服务器启用Https,本文结合ASP.NET Core部署模型聊一聊启用Https的方式。

温故知新

目前常见的Http请求明文传输,请求可能被篡改,访问的站点可能被伪造。

HTTPS是HTTP加上TLS/SSL协议构建的可进行加密传输、身份认证的网络协议,主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。

ASP.NET Core和Https

流程解读

① 传输密钥是对称密钥,用于双方对传输数据的加解密

② 怎么在传输之前确立传输密钥呢?

答:针对普遍的多客户端访问受信web服务器的场景, 提出非对称密钥(公钥下发给客户端,私钥存于web服务器),双方能互相加解密,说明中间数据(传输密钥)没被篡改。

③ 再抛出疑问,客户端如何认定下发的公钥是目标web服务器的公钥?又如何确定公钥下发过程没被截取篡改?

答:追溯到握手阶段的证书验证过程,浏览器从证书提取(证书颁发机构,证书绑定的域名,证书签名,证书有效期);浏览器先验证证书绑定的域名是否与目标域名匹配;浏览器内置证书颁发机构认定该证书是其有效下发;通过签名认定该证书没被篡改

④ 所以浏览器内置的证书机构(根证书)的权威性很重要, 中毒或山寨浏览器可能携带非法的根证书。

如果面向面试记忆Https原理,恐怕有些难度,所以个人用一种 【鸡生蛋还是蛋生鸡】的方式向上追溯流程, 方便大家知其然更知其所以然。

下面演示对ASP.NET Core程序两种常见部署模型强制应用Https。

常规反向代理模型

ASP.NET Core和Https

Nginx反向代理请求到后端https://receiver.server, 在nginx上添加HTTPS证书, 并强制使用HTTPS。

worker_processes 4;events { worker_connections 1024; }http { sendfile on; upstream receiver_server { server receiver:80; } server { listen 80; listen [::]:80; server_name eqid.******.com; return 301 https://eqid.******.com$request_uri; }
 server { listen 443 ssl; listen [::]:443 ssl; ssl on; server_name eqid.******.com;
 ssl_certificate /conf.crt/live/******.com.crt; ssl_certificate_key /conf.crt/live/******.com.key; location / { proxy_pass http://receiver_server; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_redirect off; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }}

dotnet.exe自宿模型

Kestrel用作边缘(面向Internet)Web服务器, 这个部署模型不常见,但依旧存在。

ASP.NET Core和Https

我们利用 Visual Studio 2019项目模板构建 ASP.NetCore项目--- 勾选HTTPS支持, 会默认添加支持Https的Middleware;

  • App.UseHttpsRedirection 强制Http请求跳转到Https

  • app.UseHsts 指示浏览器为特定主机头在特定时间范围内的所有通信应用Https。

HSTS(HTTP Strict Transport Protocol)的作用是强制浏览器使用HTTPS与服务器创建连接,避免原有的301重定向Https时可能发生中间人劫持。

服务器开启HSTS的方法是,当客户端通过HTTPS发出请求时,在服务器返回的超文本传输协议响应头中包含Strict-Transport-Security字段。非加密传输时设置的HSTS字段无效。

Development证书

VS模板构建的web会使用dotnet cli 提供的开发证书在https://localhost:5001 地址接收请求。

关于开发证书, 可倒腾 dotnet dev-certs https --help 命令:

dotnet dev-certs https -c清除证书,启动程序会报无服务器证书异常

dotnet dev-certs https -t信任证书,会弹窗提示确认安装名为localhost的开发根证书:

- 否:web能正常启动,Https请求将获取无效证书,浏览器地址栏警示不安全(提示浏览器不信任localhost根证书,证书无效)

- 是:web正常启动,浏览器发在地址栏显示正常的Httsp小锁♎图标

windows上,最安全方式是使用certificate store来注册已认证的HTTPS,但是有时候希望在程序内绑定证书+私钥, 这样便于在不同平台上部署。

文件证书

ASP.NET Core支持使用硬盘上文件证书来建立Https连接(这在linux上很常见)。

以下代码允许Kestrel传入文件证书和私钥,并建立Https连接。

public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseKestrel(options => { options.Listen(IPAddress.Loopback, 5000); options.Listen(IPAddress.Loopback, 5001, listenOptions => { listenOptions.UseHttps("certificate.pfx", "topsecret"); }); }) .UseStartup<Startup>;

务必确保不要将私钥存储在配置文件中:在开发模式,可使用user secrets 存储此类密钥;在生产模式,可考虑Azure Key Vault或环境变量。

更多密钥分离策略请参考: 密钥分离,.Net程序猿不再背锅

总结

希望本文有助于您大致了解ASP.NET Core中Https的应用方式。

这不是什么高深的理论,而是尝试以不同的方式启用Https、并着重解释相关中间件的用法。

END



Tags:Https   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
#概述本教程面向进行流量分析的安全专业人员。本教程假定你已经熟悉Wireshark的基本使用,并使用Wireshark 3.x版。在审查可疑的网络活动时,我们经常会遇到加密的流量。因为大...【详细内容】
2022-06-29  Tags: Https  点击:(22)  评论:(0)  加入收藏
先交代一下为啥要弄这么个本地的https环境,我计划在本地弄一套和线上一样的环境,这样在开发时我可以直接通过jenkins将代码提交到线上不需要在通过ftp上传文件到服务器,方便我...【详细内容】
2022-06-21  Tags: Https  点击:(41)  评论:(0)  加入收藏
安全第一步,群晖NAS使用官网域名和自己的域名配置SSL实现HTTPS访问【新手导向】NAS本质还是一个可以随时随地访问的个人数据存储中心,我们在外网访问的时候,特别是在公网IP下,其...【详细内容】
2022-06-17  Tags: Https  点击:(108)  评论:(0)  加入收藏
var https=require("https");//https服务 var fs= require("fs"); var Koa = require(&#39;koa&#39;); var enforceHttps = require(&#39;koa-sslify&#39;).default; var ap...【详细内容】
2022-06-14  Tags: Https  点击:(28)  评论:(0)  加入收藏
3.7Servlet忘记实现HttpServlet接口处理【理解】出现情况在写Servlet时,忘记了实现HttpServlet接口导致结果在反射创建对象后,强转成HttpServlet时,会报类型转换异常解决方案在...【详细内容】
2022-06-06  Tags: Https  点击:(30)  评论:(0)  加入收藏
https分为单项认证和双向认证。一般https页面上的访问都是单项认证,服务端发送数字证书给客户端,客户单方面验证。而服务端不做验证。而双向认证,需要双方都有证书,然后发送给对...【详细内容】
2022-05-29  Tags: Https  点击:(60)  评论:(0)  加入收藏
我在的VPN证书最近过期了,之前一直能忍就忍了,最近闲来有空,就更新一下算了。应该有很多同志跟我一样,受不了国内DDNS提供商动不动就需要提供身份证,且提供的域名又少,又必须用实...【详细内容】
2022-05-19  Tags: Https  点击:(93)  评论:(0)  加入收藏
准备工作  1.一台Win7虚拟机,在Win7虚拟机上安装Brupsuite和火狐浏览器。  2.在火狐浏览器中安装代理工具插件。   3.安装CA证书  3.1 获取证书  注意:首先使用火狐...【详细内容】
2022-04-13  Tags: Https  点击:(111)  评论:(0)  加入收藏
harles 不能直接抓取 HTTPS 请求,以请求百度(下图)为例,可以看到请求下方报文都显示为 unknown ,说明现在我们无法获取 HTTPS 的报文。 一、抓取 HTTPS 的请求需要进行三步配置1...【详细内容】
2022-04-07  Tags: Https  点击:(117)  评论:(0)  加入收藏
对于想抓取HTTPS的测试初学者来说,常用的工具就是fiddler。但是初学时,大家对于fiddler如何抓取HTTPS难免走歪路,也许你一步步按着网上的帖子成功了,这自然是极好的。但也有可...【详细内容】
2022-03-31  Tags: Https  点击:(248)  评论:(0)  加入收藏
▌简易百科推荐
在本文中,我们将学习如何使用 Next.js、 Prisma、 Postgres 和 Fastify 构建一个 Full-stack 应用程序。在本文中,我们将学习如何使用 Next.js、 Prisma、 Postgres 和 Fastif...【详细内容】
2022-07-12  qaseven    Tags:全栈   点击:(9)  评论:(0)  加入收藏
好的软件开发网站有哪些?做软件开发哪些网站能提供帮助呢?这些很多做软件开发的小伙伴都会问到的问题。007出海全球社交流量导航网站,整合了多方出海跨境网站资源,为你介绍出海...【详细内容】
2022-07-08  Chuhai007    Tags:软件开发   点击:(10)  评论:(0)  加入收藏
我们用monkey做压力测试后,会保存一个monkey日志,那如果想快速的分析日志中有哪些异常,我们可以用批处理工具进行快速的筛查,我们一起来看看吧。先编写个小脚本,然后修改为bat后...【详细内容】
2022-07-08  溪流涌动    Tags:monkey   点击:(13)  评论:(0)  加入收藏
白盒测试落地实践分为两个大方向,一个是静态分析,一个是动态分析,当然啦,也可以叫做静态测试和动态测试。那我们如何高质量保效率的做好白盒测试呢?Parasoft已经为您准备好了成熟...【详细内容】
2022-07-08  Parasoft中国    Tags:白盒测试   点击:(11)  评论:(0)  加入收藏
Altium Designer 自带脚本功能的开发项目,可以调用官方AD API接口对原理图或者PCB进行自动操作,本文主要分享开发的流程,和一些基本的概念信息,本文介绍的脚本工具例子可以用在P...【详细内容】
2022-07-07  电子工程师伟哥    Tags:Altium Designer   点击:(21)  评论:(0)  加入收藏
一、目录介绍 前置知识点 NIO Netty 的核心组件 Channel Callback Future 和 Promise 事件和 ChannelHandler Hello World二、前置知识点1、NIO首先我们需要回顾一...【详细内容】
2022-07-06  架构师jickly    Tags:聊天系统   点击:(16)  评论:(0)  加入收藏
1.事件流事件流是对事件执行过程的描述,了解事件的执行过程有助于加深对事件的理解,提升开发实践中对事件运用的灵活度。2.捕获和冒泡捕获阶段是【从父到子】的传导过程,冒泡阶...【详细内容】
2022-07-06  金乾坤    Tags:API   点击:(13)  评论:(0)  加入收藏
刷盘策略CommitLog的asyncPutMessage方法中可以看到在写入消息之后,调用了submitFlushRequest方法执行刷盘策略:public class CommitLog { public CompletableFuture<PutMe...【详细内容】
2022-07-06  Java码农之路    Tags:RocketMQ   点击:(16)  评论:(0)  加入收藏
最近读了本好书-《深度学习推荐系统》,读完不觉全身通畅,于是就有了写这篇文章的想法,把自己的理解和总结分享给大家。 本文将按照从算法到工程的顺序,先介绍一下推荐系统整体...【详细内容】
2022-07-05  InfoQ    Tags:推荐系统   点击:(22)  评论:(0)  加入收藏
在后端并不是写完一个接口的业务逻辑就能投入使用的,接口的优化更是一个难点与麻烦之处(下面的内容我们不考虑前端的处理,因为不能完全靠前端,前后端都需要做自己的处理工作)1.幂...【详细内容】
2022-07-05  老诚不bug  掘金  Tags:幂等   点击:(20)  评论:(0)  加入收藏
站内最新
站内热门
站内头条