资讯动态

Orchard Core HTTPS 模块实战指南:强制 HTTPS、HSTS 与 SSL 端口配置详解

发布时间:2026/9/28 6:26:50 来源:尧图企业网站定制
CMS后端Web框架【免费下载链接】OrchardCoreOrchard Core is an open-source modular and multi-tenant application framework built with ASP.NET Core, and a content management system (CMS) built on top of that framework.项目地址https://gitcode.com/gh_mirrors/or/OrchardCore点击查看免费下载导读OrchardCore.Https是 Orchard Core 中负责保障站点通信安全的模块它解决的核心问题是当用户通过 HTTP 访问站点时如何可靠地将其重定向到 HTTPS并按需启用 HTTP 严格传输安全HSTS头。本文以官方文档 src/docs/reference/modules/Https/README.md 为主体完整讲解该模块的 Recipe 配置、四个核心配置项及其取值语义并结合仓库源码说明其底层执行链路与安全边界。读完本文你将能够通过 Recipe 或管理界面独立完成 HTTPS 强制跳转、HSTS 策略禁用 / 强制 / 按环境与自定义 SSL 端口的全套配置。模块定位与工作原理该模块在模块清单中被归类为Security安全类别官方描述为 This module will ensure HTTPS is used when accessing the website见 Manifest.cs。它的职责可以概括为三件事强制 HTTPS对所有请求启用 HTTPS 重定向对应RequireHttpsHSTS 策略决定是否以及何时下发Strict-Transport-Security响应头对应StrictTransportSecurityMode端口配置在无法自动推断 SSL 端口时指定重定向目标端口对应SslPort。从源码结构看整个模块是一个典型的多租户站点设置Site Settings模块设置通过HttpsSettings模型持久化由HttpsService从ISiteService读取最终在Startup.ConfigureAsync阶段被转换为 ASP.NET Core 的中间件注册。核心文件均位于 src/OrchardCore.Modules/OrchardCore.Https/下文逐一展开。启用模块在 Orchard Core 中启用功能模块的标准方式有两种通过 Recipe在 Recipe 的steps数组中添加feature步骤将OrchardCore.Https加入启用列表通过管理界面进入Configuration → Features搜索 HTTPS模块名见 Manifest.cs并启用。启用后站点设置页面会新增HTTPS分组由 HttpsSettingsDisplayDriver.cs 中的GroupId Https定义用于在管理界面中维护配置详见后文管理界面配置一节。Recipe 配置完整的 HTTPS 设置示例HTTPS 设置可以通过 Recipe 的settings步骤进行配置。官方文档给出的完整示例为{ steps: [ { name: settings, HttpsSettings: { StrictTransportSecurityMode: Disabled, RequireHttps: true, RequireHttpsPermanent: false, SslPort: 443 } } ] }对应地HttpsSettings模型见 HttpsSettings.cs包含以下属性Recipe 中的 JSON 键与之一一对应PropertyTypeDescriptionStrictTransportSecurityModeStringWhether HTTP Strict Transport Security (HSTS) isDisabledby default,Enabled, orFromConfiguration(enabled in Production, disabled otherwise).RequireHttpsBooleanWhether to require HTTPS for all requests.RequireHttpsPermanentBooleanWhether to use a permanent (301) redirect for HTTPS redirection.SslPortIntegerThe port number for SSL connections.各属性的源码级说明RequireHttps默认false仅当它为true时Startup.ConfigureAsync才会调用app.UseHttpsRedirection()注册 HTTPS 重定向中间件见 Startup.cs。RequireHttpsPermanent默认false它决定重定向使用的 HTTP 状态码。默认情况下ASP.NET Core 的UseHttpsRedirection使用临时重定向307——注意这与官方文档表格中写的 301 略有出入当前仓库源码实际使用的是308 Permanent Redirect当该选项为true时HttpsRedirectionOptions.RedirectStatusCode被显式设置为StatusCodes.Status308PermanentRedirect见 Startup.cs。管理界面的提示文案同样说明开启后使用308 Moved Permanently替代临时的307 Found见 HttpsSettings.Edit.cshtml。SslPort默认null即不指定它是可空整数int?。留空时由UseHttpsRedirection中间件尝试自动推断端口显式设置后会写入HttpsRedirectionOptions.HttpsPort作为重定向目标的端口。典型场景是站点位于自定义端口如8443或反向代理后无法自动推断端口时。StrictTransportSecurityMode默认Disabled决定 HSTS 头的下发策略取值语义详见下一节。另外需要注意HttpsSettings中存在一个标记为[Obsolete]的遗留属性EnableStrictTransportSecurity布尔类型且带[JsonIgnore]它仅为旧数据的迁移而保留会在未来版本中移除。不要在新配置中使用它一律使用StrictTransportSecurityMode见 HttpsSettings.cs。StrictTransportSecurityMode取值详解HSTSHTTP 严格传输安全通过Strict-Transport-Security响应头告知浏览器在指定时间内请始终通过 HTTPS 访问本域名。该模块将 HSTS 策略抽象为三值枚举HttpStrictTransportSecurityMode见 HttpStrictTransportSecurityMode.cs官方文档的取值表如下ValueBehaviorDisabledAlways disables HSTS headers, regardless of environment.EnabledAlways enables HSTS headers, regardless of environment.FromConfigurationEnables HSTS automatically in theProductionenvironment and disables it in other environments.结合 Startup.cs 可以确认其执行逻辑Enabled无条件调用app.UseHsts()任何环境下都下发 HSTS 头FromConfiguration仅当IHostEnvironment.IsProduction()为真时才调用app.UseHsts()即生产环境启用、其余环境Development、Staging 等禁用Disabled任何情况下都不注册 HSTS 中间件这也是该属性的默认值。需要特别强调的是FromConfiguration判断的是宿主环境Host Environment而非单个租户的环境。也就是说在一个以 Production 环境运行的多租户站点中即便某个租户选择了FromConfigurationHSTS 也会对该租户生效反之在本地开发运行时它不会生效从而避免开发期浏览器被 HSTS 策略锁定到 HTTPS。HSTS 中间件的实际参数当启用 HSTS 时模块通过services.AddHsts(options ...)配置中间件见 Startup.cs当前仓库中的参数为参数值Preloadfalse不申请 HSTS preload 预加载列表IncludeSubDomainstrueHSTS 头覆盖所有子域名MaxAgeTimeSpan.FromDays(365)缓存期 1 年这些值会体现在实际下发的响应头中Strict-Transport-Security: max-age31536000; includeSubDomains。管理界面配置Admin UI除 Recipe 外也可以在管理界面中配置 HTTPS 设置。入口为Configuration → Settings → HTTPS表单定义于 HttpsSettings.Edit.cshtml对应HttpsSettingsViewModel见 HttpsSettingsViewModel.cs包含四个控件Require HTTPS复选框对应RequireHttps提示 Require HTTPS for all requestsHSTS mode下拉框可选Disabled/Enabled/FromConfiguration界面文案为 From environment — enabled in Production, disabled otherwiseRequire HTTPS Permanent复选框对应RequireHttpsPermanent说明是否用永久重定向308替代临时重定向307SSL Port数字输入框留空时由中间件尝试自动推断。两个关键的安全行为仅允许在 HTTPS 请求下修改表单控件带有asp-is-disabled(!Model.IsHttpsRequest)并且 HttpsSettingsDisplayDriver.cs 会在非 HTTPS 请求时弹出警告For safety, changing HTTPS-only settings over HTTP has been prevented.。UpdateAsync中同样做了校验非 HTTPS 请求直接返回编辑视图不写库。因此若要修改这些设置请务必先通过 HTTPS 访问管理后台。修改后自动重启租户 Shell保存成功后调用_shellReleaseManager.RequestRelease()见 HttpsSettingsDisplayDriver.cs因为 HTTPS 中间件是在租户启动Startup.ConfigureAsync时按设置注册的必须重启 Shell 使新配置立即生效。保存操作前还会调用context.AddTenantReloadWarningWrapper()向用户提示这一行为。权限修改 HTTPS 设置需要ManageHttpsManage HTTPS权限由 Permissions.cs 定义默认授予Administrator角色。若当前用户无此权限Display Driver 的EditAsync/UpdateAsync会直接返回空结果见 HttpsSettingsDisplayDriver.cs。底层执行链路从设置到中间件把前文串联起来一次 HTTPS 请求的处理链路如下租户启动时Startup.ConfigureServices注册IHttpsService单例、站点设置 Display Driver、数据迁移与权限提供者见 Startup.csStartup.ConfigureAsync通过IHttpsService.GetSettingsAsync()读取当前租户的HttpsSettings其实现HttpsService委托ISiteService.GetSettingsAsyncHttpsSettings()见 HttpsService.cs依据RequireHttps决定是否注册UseHttpsRedirection()依据StrictTransportSecurityMode与环境决定是否注册UseHsts()HttpsRedirectionOptions中的RedirectStatusCode308 或默认值与HttpsPort来自SslPort在ConfigureServices阶段通过IOptions配置完成请求到达时HTTP 请求被重定向到 HTTPS若 HSTS 生效响应头Strict-Transport-Security一并下发。从源码结构还可以推断模块的设置可随站点设置一起参与部署导出——DeploymentStartup通过AddSiteSettingsPropertyDeploymentStepHttpsSettings, ...注册了 Https settings 导出步骤见 Startup.cs前提是站点启用了OrchardCore.Deployment功能。版本迁移从旧布尔值到枚举StrictTransportSecurityMode是在较新版本中取代旧布尔设置EnableStrictTransportSecurity引入的。官方 3.0.0 发布说明见 src/docs/releases/3.0.0.md明确记载了这一变更旧的布尔设置被新的枚举设置取代并提供迁移逻辑将已存储的布尔值转换为等价的枚举模式同时移除过时的键。该迁移实现在 HttpsSettingsMigrations.cs 中若已存储的设置对象中没有StrictTransportSecurityMode键但有EnableStrictTransportSecurity布尔值则将其转换为Enabled或Disabled枚举名写入设置随后删除旧键并更新站点设置。这也解释了为什么HttpsSettings中保留了带[Obsolete]标记的EnableStrictTransportSecurity属性——它仅服务于此次迁移。升级到新版后旧配置会自动平滑迁移无需人工干预。安全注意事项启用 HSTS 是一项一次性承诺式的安全策略务必谨慎浏览器在收到Strict-Transport-Security头后会在max-age当前仓库配置为 365 天内强制走 HTTPS即使证书或 HTTPS 服务后续不可用也不会回退到 HTTP。管理界面对此有明确的红色警告Use HSTS with caution, as browsers may stop connecting over HTTP after receiving the header if HTTPS later becomes unavailable.见 HttpsSettings.Edit.cshtml。当前 HSTS 配置包含IncludeSubDomains true即对所有子域名生效务必确认所有子域名都能提供有效 HTTPS 服务。在本地开发或测试环境优先使用Disabled或FromConfiguration避免开发期被 HSTS 缓存锁定。RequireHttpsPermanent开启后使用 308 永久重定向适合已稳定全站 HTTPS 的站点若仍处于 HTTPS 切换过渡期建议保留默认的临时重定向。小结OrchardCore.Https模块以四个配置项覆盖了 HTTPS 强制的全部关键决策RequireHttps决定是否重定向、RequireHttpsPermanent决定重定向是否为永久性、SslPort解决端口推断问题、StrictTransportSecurityMode则细粒度地控制 HSTS 的下发策略禁用 / 强制 / 按宿主环境。无论是通过 Recipe 的settings步骤批量下发配置还是在 HTTPS 管理界面逐项设置配置都会汇入租户的HttpsSettings并在租户启动时转化为 ASP.NET Core 的 HTTPS 重定向与 HSTS 中间件。配合 3.0.0 引入的自动迁移旧版布尔 HSTS 设置也能无缝升级到新的枚举模型。赞分享CMS后端Web框架【免费下载链接】OrchardCoreOrchard Core is an open-source modular and multi-tenant application framework built with ASP.NET Core, and a content management system (CMS) built on top of that framework.项目地址https://gitcode.com/gh_mirrors/or/OrchardCore点击查看免费下载相关推荐Phoenix 应用 SSL/TLS 配置完整指南HTTPS 端点、强制 HTTPS 与 HSTS 实践Phoenix 应用 SSL/TLS 配置完整指南HTTPS 端点、强制 HTTPS 与 HSTS 实践 本指南基于 Phoenix 仓库官方文档 guid后端SSL/TLS配置.htaccess指南强制HTTPS与HSTS设置终极教程SSL/TLS配置.htaccess指南强制HTTPS与HSTS设置终极教程 在当今网络安全环境中保护网站数据传输安全至关重要。本教程将详细介绍如何使用 .教程终极指南HTTPS-PORTAL HSTS头设置完整教程与安全策略详解终极指南HTTPS PORTAL HSTS头设置完整教程与安全策略详解 HTTPS PORTAL是一个基于Docker的完全自动化HTTPS服务器它整合了N后端API网关网络上一篇最全面的Terraform状态管理工具Terraboard从部署到高级监控实战指南下一篇终极指南如何使用wechat-go免费打造个性化微信机器人创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑