强制SSL连接

问题描述:


强制SSL连接

A)你能在服务器端,强制SSL连接(通过唯一的每个Web应用程序中选择要求安全通道选项),或者你也强制执行为每个虚拟目录甚至只有每网页?


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


感谢名单

如上所述,1)SSL可以在服务器,侧面或虚拟目录中设置。 2)如果server/site/vdir使用“Require Secure Channel”设置进行配置,则服务器的响应将是“403.4 Forbidden:需要SSL才能查看此资源”。错误或“403.5 Forbidden:SSL 128”来查看此资源。“

您实际上可以自定义403.4或403.5错误以重定向回HTTPS。在您的网站下创建一个VDIR 否SSL要求**这是重要的) - 我使用“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 
%> 

编辑服务器/网站/ VDIR的自定义错误属性403.4/403.5,并设置消息类型到URL和URL为“/ CustomError/403_4_Error.asp”。

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

+0

这比thanx非常有用 – SourceC 2009-05-06 19:56:22

有可能是配置设置在IIS级别来执行这一点,但在代码中,你可以检查,像这样Request.IsSecureConnection值:

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

在哪里“ ....“是当前页面的网址。这种类型代码的好处在于MasterLayout.master文件的Page_Load方法。

+0

任何想法如何在IIS级别实施SSL(每个网页)? – SourceC 2009-05-02 23:39:14

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

这是blog post显示它是如何完成的。