执行SSL连接

时间:2009-05-02 20:40:41

标签: asp.net iis ssl


A)您是否可以在服务器端通过每个Web应用程序强制执行SSL连接(通过选择“需要安全通道”选项),还是可以按虚拟目录甚至每个网页强制执行SSL连接?


B)如何强制执行SSL连接?如果用户指定http而不是https协议(在请求的URL中),请求将自动被IIS拒绝?


感谢名单

3 个答案:

答案 0 :(得分:3)

如上所述,1)可以在服务器,侧面或虚拟目录中设置SSL。

2)如果使用“Require Secure Channel”设置配置server / site / vdir,则服务器的响应将为“403.4 Forbidden:查看此资源需要SSL”。错误或“403.5 Forbidden:查看此资源需要SSL 128。”。

您实际上可以自定义403.4或403.5错误以重定向回HTTPS。使用无SSL要求 **这是重要的)在您的网站下创建VDIR - 我使用“CustomError”。在此目录中创建一个名为403_4_Error.asp的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
%>

编辑403.4 / 403.5的server / site / vdir的Custom Error属性,并将MessageType设置为URL,将URL设置为“/CustomError/403_4_Error.asp”。

请注意,使用ASP,您可以轻松使用ASP.net或任何其他脚本语言。

答案 1 :(得分:2)

可能有一个配置设置在IIS级别强制执行此操作,但在代码中,您可以检查Request.IsSecureConnection值,如下所示:

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

其中“....”是当前页面的网址。这种类型的代码的一个好地方是在MasterLayout.master文件的Page_Load方法中。

答案 2 :(得分:2)

一种巧妙的方法是注册一个HttpModule,检查每个传入的请求并在必要时重定向:然后不需要自定义错误。

这是blog post,展示了它是如何完成的。