在子域上使用SSL的Azure云服务

时间:2012-12-07 22:15:20

标签: ssl azure

我的Azure Cloud Service设置如下:

<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?

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:1)

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

  1. 在应用程序级别强制执行HTTPS。有很多方法可以做到这一点,具体取决于应用程序的组织方式。例如,如果您使用的是ASP.NET MVC, here's an option。您还可以使用Global.asax处理程序中的代码或使用HttpModule或任何其他方式来推出自己的解决方案。
  2. 将/ Admin /子目录拆分为自己的独立站点。确保在HTTP上提供的站点没有/ Admin / site的任何代码 - 然后它无法提供该内容。在.csdef中设置一个单独的网站,您已经完成了很多工作,以便为/ Admin / site提供服务。