Обеспечение SSL-соединения - PullRequest
2 голосов
/ 03 мая 2009


A) Можете ли вы на стороне сервера принудительно установить SSL-соединение (выбрав параметр «Требовать безопасный канал») только для каждого веб-приложения или также для каждого виртуального каталога или даже только для веб-страницы?


B) Как именно работает принудительное соединение SSL? Что если пользователи укажут http вместо протокола https (в запрошенном URL-адресе), запрос будет автоматически отклонен IIS?


* 1014 спасибо *

Ответы [ 3 ]

3 голосов
/ 06 мая 2009

Как указано выше, 1) SSL можно установить на сервере, на стороне или в виртуальном каталоге.

2) Если сервер / сайт / vdir настроен с использованием параметра «Требовать безопасный канал», ответ от сервера будет «403.4 Запрещено: для просмотра этого ресурса требуется SSL». ошибка или «403.5 Запрещено: для просмотра этого ресурса требуется SSL 128».

На самом деле вы можете настроить ошибку 403.4 или 403.5 для перенаправления обратно на HTTPS. Создайте VDIR под своим сайтом с НЕТ требования SSL (** Это важно ) - я использую «CustomError». Создайте файл ASP внутри этого каталога с именем 403_4_Error.asp, содержащий следующее:

<%@ LANGUAGE="VBScript" %> 
<%
if Request.ServerVariables("HTTPS") <> "on" then
    sServer = Request.ServerVariables("SERVER_NAME")
    sScript = Request.ServerVariables("SCRIPT_NAME")
    sQuery  = Request.ServerVariables("QUERY_STRING")
    Response.Write("https://" & sServer & sScript & "?" & sQuery)
end if
%>

Измените свойство Custom Error сервера / сайта / vdir для 403.4 / 403.5 и установите для типа сообщения значение URL, а для URL - значение "/CustomError/403_4_Error.asp".

Обратите внимание, что используется ASP, вы можете легко использовать ASP.net или любой другой язык сценариев.

2 голосов
/ 14 июля 2009

Хороший способ сделать это - зарегистрировать HttpModule, который проверяет каждый входящий запрос и перенаправляет при необходимости: тогда нет необходимости в пользовательских ошибках.

Вот сообщение в блоге , показывающее, как это делается.

2 голосов
/ 03 мая 2009

Может быть параметр конфигурации для принудительного применения этого на уровне IIS, но в коде вы можете проверить значение Request.IsSecureConnection следующим образом:

if (!Request.IsSecureConnection)
{
    try
    {
        Response.redirect("https://....", true);
    }
    catch (ThreadAbortException)
    {}
}

Где "...." - это URL для текущей страницы. Хорошее место для такого типа кода - метод Page_Load вашего файла MasterLayout.master.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...