【问题标题】:Can I detect if SSL/https is enabled for an ASP.NET website from within the site's code?我可以从网站代码中检测是否为 ASP.NET 网站启用了 SSL/https?
【发布时间】:2011-05-10 21:31:15
【问题描述】:

我正在开发一个可以在网络服务器上启用或不启用 https 的 CMS。我希望能够检测是否启用了 https,以便我可以采取相应的行动(例如,向管理员显示一些与 https 相关的选项,并重定向到 https 以进行管理员登录)。

我不是在寻找 Request.IsSecureConnection,因为它只会告诉我当前请求是否通过 https。我想要一些东西来告诉我 IIS 中站点的当前绑定是否包括与当前请求所在域相同的 https 绑定。因此,例如,即使当前请求是针对http://example.com/ 的,因此不安全,我想知道https://example.com/ 是否可以工作,以便我可以(例如)将用户重定向到它,如果他们以管理员身份登录。

不过,我没有运气在 System.Web.Configuration 中寻找任何可以告诉我当前站点绑定的信息。

如果启用了 https,我目前的解决方法是要求管理员在 web.config 中设置 appSetting,但如果我可以使其自动运行,我更愿意。必须设置相同的东西两次——一次在 IIS 中,一次在 web.config 中——令人困惑。

【问题讨论】:

  • 我很困惑为什么检查请求还不够?
  • 因为,如果站点在http://example.com/https://example.com/ 上运行,那么当有人访问http://example.com/ 时,这不是安全连接。但我仍然需要知道https://example.com/ 工作,以便我可以(例如)在用户以管理员身份登录时将其重定向到它。
  • 我开发了一个具有类似要求的应用程序。我们决定只保留配置设置,以便客户可以选择是否使用 HTTPS。检测是否支持 SSL 不起作用有几个原因:一,我们必须支持各种版本的 IIS;第二,我们有一个客户的网站支持 SSL,他们已经对其进行了配置,但无论出于何种原因,他们都不想在我们的应用程序中使用 SSL,即使在登录时也是如此。(不记得为什么,这就像四年前一样。 ..) 无论如何,我的观点是让他们在安装时配置它可能更容易/更好。

标签: asp.net iis ssl https system.web


【解决方案1】:

根据您的 IIS 版本,您可以使用托管的 .net 代码在 IIS7 中执行管理任务。这是一个查询站点的绑定以查看是否启用了 https 的示例

http://msdn.microsoft.com/en-us/library/microsoft.web.administration.bindingcollection(v=VS.90).aspx

【讨论】:

  • 是的,但是 Microsoft.Web.Administration 不能在站点内部运行的代码中使用,是吗?出于显而易见的原因,网站代码没有以管理权限运行。
  • 我刚刚对此进行了测试以确认,我肯定会收到权限被拒绝错误。这是可以理解的,因为该 API 可以让我访问整个服务器的配置;访问它会带来安全风险。但是当前正在运行的站点的配置肯定不会带来安全风险吗?
  • @Stuart - 你是对的,你需要成为管理员才能使用 System.DirectoryServices 或 MWA 从 IIS6 元数据库或 applicationHost.config 读取站点的配置。这样做的原因是配置数据没有在每个站点的元数据库或 applicationHost.config 中锁定。如果您使用的是功能委托,那么 IIS7 中存在一个例外,但该数据只能通过 MMC 访问。
  • @Kev - 对 - 那么您是否知道以编程方式查找当前站点的绑定的受支持方式,或者特别是它是否具有 https 绑定?还是说真的没办法,需要管理员手动告诉我?
【解决方案2】:

最简单的方法是从站点向站点发出 https 请求,如果成功,则表明支持 https。将此缓存在静态变量中,以便每次应用调用时仅调用一次。

【讨论】:

  • 不过,这可能会失败:有时使用 NAT,服务器无法访问自己的公共 IP 地址。我见过这种情况。 (而且这很恶心,很难相信网站没有办法检查它自己的托管环境配置......)
  • @Stuart,很遗憾,由于安全限制,网站默认无法检查自己的配置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多