Asp.net 强制SSL连接

Asp.net 强制SSL连接,asp.net,iis,ssl,Asp.net,Iis,Ssl,A) 在服务器端,您可以仅对每个web应用程序强制SSL连接(通过选择“需要安全通道选项”),还是也可以对每个虚拟目录甚至每个网页强制SSL连接 B) 强制SSL连接到底是如何工作的?如果用户指定http而不是https协议(在请求的URL中),请求将自动被IIS拒绝 thanx可能有一个配置设置来在IIS级别强制执行此操作,但在代码中,您可以这样检查值: if (!Request.IsSecureConnection) { try { Response.re


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


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



thanx

可能有一个配置设置来在IIS级别强制执行此操作,但在代码中,您可以这样检查值:

if (!Request.IsSecureConnection)
{
    try
    {
        Response.redirect("https://....", true);
    }
    catch (ThreadAbortException)
    {}
}
其中“…”是当前页面的url。此类代码的一个好位置是MasterLayout.master文件的页面加载方法。

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

2) 如果使用“要求安全通道”设置配置服务器/站点/vdir,则服务器的响应将是“403.4禁止:查看此资源需要SSL”。错误或“403.5禁止:查看此资源需要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的服务器/site/vdir的自定义错误属性,并将MessageType设置为URL,将URL设置为“/CustomError/403_4_Error.asp”


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

一个简单的方法是注册一个检查每个传入请求并在必要时重定向的HttpModule:无需自定义错误

下面是一个演示如何完成的示例。

您知道如何在IIS级别强制实施SSL(每个网页)?