A)您是否可以在服务器端通过每个Web应用程序强制执行SSL连接(通过选择“需要安全通道”选项),还是可以按虚拟目录甚至每个网页强制执行SSL连接?
B)如何强制执行SSL连接?如果用户指定http而不是https协议(在请求的URL中),请求将自动被IIS拒绝?
感谢名单
答案 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,展示了它是如何完成的。