2012-12-07 113 views
2

我有一個Azure的雲服務設置如下:Azure的雲服務透過SSL子域

<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

如果您正在使用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

如果/ SampleWebsite /擁有/ Admin /子目錄的所有代碼,我認爲沒有辦法阻止用戶通過HTTP連接到它。我認爲您在這裏有幾個選項:

  1. 在應用程序級別實施HTTPS。有很多方法可以做到這一點,這取決於你的應用程序的組織方式。例如,如果您使用ASP.NET MVC, here's an option。您也可以使用Global.asax處理程序中的代碼或使用HttpModule或其他任何方式來滾動您自己的解決方案。
  2. 將/ Admin /子目錄拆分到它自己的單獨站點中。確保在HTTP上提供的站點沒有任何/ Admin /站點的代碼 - 那麼它無法提供該內容。在.csdef中設置一個單獨的站點,您已經完成了大部分工作,可以爲/ Admin /站點提供服務。