Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我是否可以从站点内检测ASP.NET网站是否启用了SSL/https';s代码?_Asp.net_Iis_Ssl_Https_System.web - Fatal编程技术网

我是否可以从站点内检测ASP.NET网站是否启用了SSL/https';s代码?

我是否可以从站点内检测ASP.NET网站是否启用了SSL/https';s代码?,asp.net,iis,ssl,https,system.web,Asp.net,Iis,Ssl,Https,System.web,我正在开发一个CMS,它可以在Web服务器上启用或不启用https的情况下运行。我希望能够检测是否启用了https,以便我可以相应地采取行动(例如,向管理员显示一些与https相关的选项,并重定向到https进行管理员登录) 我没有寻找Request.IsSecureConnection,因为这只会告诉我当前请求是否通过https。我想知道IIS中站点的当前绑定是否在当前请求所在的同一域中包含https绑定。因此,例如,即使当前请求是针对http://example.com/因此不安全,我想知道

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

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

不过,我在System.Web.Configuration中找不到任何可以告诉我当前站点绑定的信息


我目前的解决方法只是要求管理员在启用https的情况下在web.config中设置appSetting,但我更希望能够自动设置。必须两次设置相同的内容—一次在IIS中,一次在web.config中—令人困惑。

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

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


我不明白为什么检查请求是不够的?因为,如果站点运行在
http://example.com/
https://example.com/
,当有人访问时
http://example.com/
这不是一个安全连接。但我仍然需要知道
https://example.com/
会起作用,因此我可以(例如)在用户以管理员身份登录时将其重定向到该应用程序。我使用的是一个具有类似要求的应用程序。我们决定只使用配置设置,以便客户可以选择是否使用HTTPS。检测是否支持SSL并没有起作用,原因有两个:一是我们必须支持各种版本的IIS;第二,我们有一个客户的站点支持SSL,他们已经配置了SSL,但无论出于什么原因,他们都不想在我们的应用程序中使用SSL,即使是在登录时。(不记得为什么,这是四年前的事了…)无论如何,我的观点是,让他们在安装时配置它可能更容易/更好。但这可能会失败:有时使用NAT,服务器无法访问自己的公共IP地址。我见过这种情况。(加上它很讨厌,很难相信网站没有办法检查自己的托管环境配置…@Stuart,不幸的是,由于安全限制,网站默认情况下无法检查自己的配置。是的,但是Microsoft.Web.Administration无法从网站本身运行的代码中使用,是吗?由于明显的原因,网站代码没有使用管理权限运行。我只是测试了一下以确认,我肯定会遇到一个权限被拒绝的错误。这是可以理解的,因为API可以让我访问整个服务器的配置;有权访问这将是一种安全风险。但是,当前正在运行的站点的配置肯定不存在安全风险?@Stuart-没错,您需要是管理员才能使用System.DirectoryServices或MWA从IIS6元数据库或applicationHost.config读取站点的配置。原因是配置数据未按站点锁定在metabase或applicationHost.config中。如果您正在使用功能委派,但该数据只能通过MMC访问,则IIS7中会出现异常。@Kev-对-那么您知道一种受支持的方法,可以通过编程方式找到当前站点的绑定,或者特别是它是否具有https绑定吗?或者你是说真的没有办法,我需要管理员手动告诉我?