合格的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
- 【ASP.NET Core和Https】app.UseHsts 指示浏览器为特定主机头在特定时间范围内的所有通信应用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请求将获取无效证书,浏览器地址栏警示不安全(提示浏览器不信任loca
推荐阅读
- 蜂蜜桂花茶如何做,桂花茶的功效和作用
- 从六个方面分析普通网站和营销型网站的不同之处
- 山楂加物两天瘦8斤,甘草山楂茶原料和做法
- 桂花茶要怎么做,桂花茶的功效和作用
- 蜘蛛瓷砖怎么样
- 如何冲泡花草茶贴心叮咛,如何挑选和保持花草茶的秘诀
- 浅析茉莉花茶的泡饮方法及功效,喝茉莉花茶的好处和功效作用
- 麦冬茶的做法和饮用注意事项,芍药花茶
- 户籍所在地、籍贯和经常居住地,具有什么法律意义? 户口所在地
- 玉兰花茶的制作方法和好处,喝茉莉花茶的好处和功效作用