google 网站质量问题,绍兴做企业网站的公司,网络公司 网站设计,使用redis做视频网站缓存合格的web后端程序员#xff0c;除搬砖技能#xff0c;还必须会给各种web服务器启用Https#xff0c;本文结合ASP.NET Core部署模型聊一聊启用Https的方式。温故知新目前常见的Http请求明文传输#xff0c;请求可能被篡改#xff0c;访问的站点可能被伪造。HTTPS是HTTP加上… 合格的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用作边缘面向InternetWeb服务器 这个部署模型不常见但依旧存在。我们利用 Visual Studio 2019项目模板构建 ASP.NetCore项目--- 勾选HTTPS支持 会默认添加支持Https的Middlewareapp.UseHttpsRedirection() 强制Http请求跳转到Httpsapp.UseHsts() 指示浏览器为特定主机头在特定时间范围内的所有通信应用Https。HSTSHTTP 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);});}).UseStartupStartup();
务必确保不要将私钥存储在配置文件中在开发模式可使用user secrets 存储此类密钥在生产模式可考虑Azure Key Vault或环境变量。更多密钥分离策略请参考 密钥分离.Net程序猿不再背锅总结希望本文有助于您大致了解ASP.NET Core中Https的应用方式。这不是什么高深的理论而是尝试以不同的方式启用Https、并着重解释相关中间件的用法。