Назад | Перейти на главную страницу

Рекомендации по перенаправлению IIS7

Я ищу "лучший способ" безопасного перенаправления сайтов с помощью IIS7 и ASP.net. Скажем, у меня есть два доменных имени:

каждый с субдоменом www.

У меня есть один сертификат EV, который использует общее имя:

Таким образом, пользователь может получить доступ к сайту 8 различными способами:

- http://mydomain.com
- http://mydomain.net
- http://www.mydomain.com
- http://www.mydomain.net
- and also using https://

Чтобы пользователь не получал ошибок сертификата, он должен быть перенаправлен на

 - https://www.mydomain.com

Как лучше всего сделать эту работу прозрачной для пользователя, при этом гарантируя, что IIS обслуживает только защищенный контент? Раньше я использовал web.config для перенаправления на такую ​​подстраницу:

<system.webServer>

<httpRedirect destination="https://www.mydomain.com/secureSubPage" />

или с подстановочными сертификатами, используя этот блок на общей базовой странице:

 if (!Request.IsSecureConnection)
    {
        Response.Redirect(Request.Url.ToString().Replace("http:", "https:"), true);
        return;
    }
    if (!Request.Url.ToString().Contains(".com"))
    {
        Response.Redirect(Request.Url.ToString().Replace(".net", ".com"), true);
        return;
    }

Чтобы заставить весь трафик использовать HTTPS на https://www.mydomain.com вы можете просто использовать одно правило перезаписи:

<rules>
    <rule name="Force HTTPS" enabled="false" stopProcessing="true">
        <match url="(.*)" />
        <conditions logicalGrouping="MatchAny">
            <add input="{HTTPS}" negate="true" pattern="^ON$" />
            <add input="{HTTP_HOST}" negate="true" pattern="^www\.mydomain\.com$" />
        </conditions>
        <action type="Redirect" url="https://www.mydomain.com{REQUEST_URI}" appendQueryString="false" redirectType="Permanent" />
    </rule>
</rules>

Это перенаправит весь трафик без HTTPS, независимо от имени домена, используемого для доступа к сайту, на https://www.mydomain.com. Он также перенаправит https://mydomain.com к https://www.mydomain.com. Поскольку в настоящее время большинство сертификатов SSL включают домен с www и без него, это не вызовет ошибки в браузере.

Вышеупомянутое правило перенаправления не может помешать пользователям заходить на ваш сайт, например, https://www.mydomain.net. Это связано с тем, что проверка имени заголовка хоста может быть выполнена только после того, как сеанс HTTPS был установлен, и до этого браузер уже покажет ошибку, поскольку имя домена не соответствует общему имени сертификата. Единственный способ предотвратить это - использовать отдельный IP-адрес для доменного имени. mydomain.com и отдельный IP-адрес для всех других доменных имен, под которыми вы хотите, чтобы ваш сайт был доступен.

Для этого вы настраиваете свой DNS, чтобы (www.)mydomain.net (и любые другие доменные имена, с которых вы хотите, чтобы ваш сайт был доступен), чтобы они указывали на IP-адрес X.X.X.1. Этот IP-адрес привязан к фиктивному сайту только для HTTP в IIS. Единственная цель этого сайта - перенаправить весь трафик на https://www.mydomain.com используя следующее правило перезаписи:

<rules>
    <rule name="Redirect to https://www.mydomain.com" enabled="false" stopProcessing="true">
        <match url="(.*)" />
        <conditions logicalGrouping="MatchAll">
            <add input="{HTTP_HOST}" negate="true" pattern="^www\.mydomain\.com$" />
        </conditions>
        <action type="Redirect" url="https://www.mydomain.com{REQUEST_URI}" appendQueryString="false" redirectType="Permanent" />
    </rule>
</rules>

Затем вы настраиваете другой сайт на IP-адресе. X.X.X.2 используя HTTP и HTTPS для (www.)mydomain.com. Используя приведенное выше правило перезаписи (первое), вы форсируете HTTPS и используете www.mydomain.com.

Это решение фактически сделает ваш сайт недоступным через HTTPS, если не указан правильный домен. mydomain.com используется, но это также то, что вы хотите, потому что у вас нет действующих сертификатов для других доменных имен.