ASP.NET Core和Https
liuian 2024-12-02 22:22 48 浏览
合格的web后端程序员,除搬砖技能,还必须会给各种web服务器启用Https,本文结合ASP.NET Core部署模型聊一聊启用Https的方式。
温故知新
目前常见的Http请求明文传输,请求可能被篡改,访问的站点可能被伪造。
HTTPS是HTTP加上TLS/SSL协议构建的可进行加密传输、身份认证的网络协议,主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。
流程解读
① 传输密钥是对称密钥,用于双方对传输数据的加解密
② 怎么在传输之前确立传输密钥呢?
答:针对普遍的多客户端访问受信web服务器的场景, 提出非对称密钥(公钥下发给客户端,私钥存于web服务器),双方能互相加解密,说明中间数据(传输密钥)没被篡改。
③ 再抛出疑问,客户端如何认定下发的公钥是目标web服务器的公钥?又如何确定公钥下发过程没被截取篡改?
答:追溯到握手阶段的证书验证过程,浏览器从证书提取(证书颁发机构,证书绑定的域名,证书签名,证书有效期);浏览器先验证证书绑定的域名是否与目标域名匹配;浏览器内置证书颁发机构认定该证书是其有效下发;通过签名认定该证书没被篡改
④ 所以浏览器内置的证书机构(根证书)的权威性很重要, 中毒或山寨浏览器可能携带非法的根证书。
如果面向面试记忆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服务器, 这个部署模型不常见,但依旧存在。
我们利用 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
扫码
相关推荐
- chrome download apk(chromedownloadapk in english)
-
手机下载安装的第三方应用出现问题,无法正常使用,建议按照以下方法操作:1.关闭重新启动该应用。2.建议将此软件卸载重新安装尝试。3.更换其他版本尝试。4.更新下手机系统版本后安装尝试5.备份手机数据(...
-
- qq空间官网手机登录网页版(qq空间官网登陆入口)
-
z.qq.com可以通过以下方式登录手机QQ空间:1、使用手机登录手机腾讯网3g.qq.com,点击“空间”,根据提示QQ号码和QQ密码就可以登录;2、通过手机直接输入手机QQ空间网址z.qq.com,根据提示操作即可登录;3、下载手机Q...
-
2025-12-22 13:55 liuian
- windows11我的电脑在哪里打开
-
1/6通过“开始”进入“设置”-“时间和语言”。2/6在“时间和语言”界面选择“区域”3/6这里我们将区域更改位“新加披”,退出。4/6打开微软自带的市场,搜索“你的手机”获取并下载。5/6安装完成后...
- win10怎么取消开机自启动(win10如何关闭开机自动启动)
-
要关闭Windows10的开机自动启动程序,你可以按下Win+R键,输入"msconfig"并按回车键打开系统配置工具。在"启动"选项卡中,你可以看到所有开机自动...
- 手机cpu排名2025(手机cpu排名榜)
-
一、2022手机CPU性能综合排名前八名手机CPU:1、型号:苹果A16---综合分数:暂无2、型号:骁龙8gen1---综合分数:42333、联发科天玑9000---综合分数:38724、...
- 论坛系统(论坛系统数据流图)
-
BBS是电子布告栏系统的简称,一种网站系统,也是目前流行网络论坛的前身。它允许用户使用终端程序通过调制解调器拨接或者因特网来进行连接,BBS站台提供布告栏、分类讨论区、新闻阅读、软件下载与上传、游戏、...
- hp1020plus打印机无法打印(惠普1020plus打印机突然不能打印了)
-
删除惠普打印机驱动和软件:1.如果你的打印机已通过USB连接到电脑,断开USB连接;2.打开控制面板—程序和功能(卸载或更改应用程序);3.在软件列表中找到惠普打印机,将其卸载;4.重启电脑...
- wifi密码破解器电脑版(wifi密码破解工具电脑版)
-
肯定不是万能钥匙这种“破解”wifi的东西。不是一两次见到把万能钥匙当做破解wifi用的人了,但实际上那玩意就是个分享wifi的软件。你连上一个wifi,密码就会被分享到云端(可以不分享),别...
- 手机临时文件夹在哪个位置(手机临时文件夹在哪个位置找)
-
1.手机文件临时文件是指在手机使用过程中产生的临时文件。2.手机应用程序在运行时需要产生一些临时文件,如缓存文件、日志文件、临时下载文件等,这些文件可以提高应用程序的运行效率和用户体验。但是,这些...
- 安卓10系统下载(安卓10 下载)
-
方法及步骤: 其实使用安卓车机下载歌曲的方法十分的简单,具体操作步骤和安卓手机一模一样。 首先我们需要在车机的应用商店上,下载一个音乐播放器,例如网易云音乐或者QQ音乐等。 下载完成后点击进入...
- 华硕人工客服24小时吗(华硕售后人工客服)
-
华硕服务中心广东省惠州市惠东县城平深路(创富斜对面)惠东同心电脑城1L11(1.3km)笔记本电脑,平板电脑华硕服务中心广东省惠州市惠东县平山镇同心电脑城1F26(1.3km)笔记本电脑,平...
- 电脑音量小喇叭不见了(电脑声音喇叭图标不见了怎么办)
-
如果您电脑上的小喇叭(扬声器)不见了,可以尝试以下方法找回:1.检查设备管理器:在Windows下,右键点击“我的电脑”(或此电脑)->点击“属性”->点击“设备管理器”,查看“声音、视...
- 腾达路由器手机设置教程(腾达路由器手机设置教程视频)
-
用手机设置腾达路由器的方法如下:1在手机上打开浏览器,输入路由器背面的管理IP和用户及对应的密码2一般第一次打开,默认会跳出设置向导,准备好宽带用户名和密码,3按向导提示输入相应内容4在无线设置的安全...
- 自配电脑配置推荐(自配电脑配置推荐百度)
-
首先,像这类软件最低要求不高。最高没上限。纯粹看你的工程量大小。CPU有双核,内存有4G,就可以运行。但是实际体验肯定比较差,卡是肯德。渲染时间也会超长,一个小作品渲染几小时是正常的。稍微大点的工程也...
- 2025年平板性价比排行(2020年值得买的平板)
-
推荐台电P30S好。 基本配置:10.1英寸IPS广视角屏幕,1280*800分辨率,16:10的黄金显示比例,K9高压独立功放,支持3.5mm耳麦接口,联发科MT8183八核处理器,4GB...
- 一周热门
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)
- mysql刷新权限 (34)
