2

我有一个 Azure 云服务设置如下:

<Sites>
  <Site name="Web" physicalDirectory="../SampleWebsite/">
    <Bindings>
      <Binding name="HttpIn" endpointName="HttpIn" />
    </Bindings>
  </Site>
  <Site name="Admin" physicalDirectory="../SampleWebsite/Admin">
    <VirtualApplication name="Admin" physicalDirectory="../SampleWebsite/Admin">
    <Bindings>
      <Binding name="HttpsIn" endpointName="HttpsIn"/>
    </Bindings>
  </Site>
</Sites>
<Endpoints>
  <InputEndpoint name="HttpIn" protocol="http" port="80" />
  <InputEndpoint name="HttpsIn" protocol="https" port="443" certificate="www.domain.com" />
</Endpoints>
<Certificates>
  <Certificate name="www.domain.com" storeLocation="LocalMachine" storeName="My" />
</Certificates>

我正在尝试为https://www.domain.com/Admin目录要求 SSL。但是,此配置允许在没有 SSL 的情况下连接到此 URL。有没有办法在 Azure 的子目录上要求 SSL?

4

2 回答 2

2

如果您正在使用 MVC 并为您想要通过 SSL 强制执行的任何控制器和/或操作实现 [RequiresSSL] 属性,请使用 breischi 的答案。否则,您也可以使用 Url Rewrite 来完成任务(将规则添加到 web.config):

<rule name="Force HTTPS" enabled="true">
    <match url="^.*/Admin/(.*)$" ignoreCase="false" />
    <conditions>
        <add input="{HTTPS}" pattern="off" />
    </conditions>
    <action type="Redirect" url="https://{HTTP_HOST}/Admin/{R:1}" appendQueryString="true" redirectType="Permanent" />
</rule>
于 2012-12-08T00:57:37.243 回答
1

如果 /SampleWebsite/ 包含 /Admin/ 子目录的所有代码,我认为没有办法阻止用户使用 HTTP 连接到它。我认为您在这里有几个选择:

  1. 在应用程序级别强制实施 HTTPS。有很多方法可以做到这一点,具体取决于您的应用程序的组织方式。例如,如果您使用的是 ASP.NET MVC,这里有一个选项. 您还可以使用 Global.asax 处理程序中的代码或使用 HttpModule 或任何其他方式推出自己的解决方案。
  2. 将 /Admin/ 子目录拆分到它自己的单独站点中。确保在 HTTP 上提供服务的站点没有 /Admin/ 站点的任何代码 - 那么它就无法提供该内容。在 .csdef 中设置一个单独的站点(您已经完成了很多工作)来为 /Admin/ 站点提供服务。
于 2012-12-07T23:41:38.477 回答