SSL 终止和 ASP.NET

文章翻译 文章翻译
文章编号: 910444 - 查看本文应用于的产品
ASP.NET 支持文章专栏

SSL 终止和 ASP.NET

若要自定义您的需要此列 我们想要邀请您提交您的想法有关您感兴趣的主题以及您想要查看的问题解决在将来的知识库文章和支持语音列。您可以提交您的想法和使用 Ask For It 窗体的反馈。还有在窗体在此栏的底部的链接
展开全部 | 关闭全部

本文内容

欢迎使用 ASP.NET 支持语音列 !我的姓名是 Jerry Orman。我已经与 Microsoft 超过五年来,花费了大部分专注于与 Web 相关技术 (如 Microsoft FrontPage 和 Microsoft SharePoint 产品和技术我时间。我花了使用 Microsoft ASP.NET 支持工程师作为最后一年。本月,我将讨论 SSL 终止和 ASP.NET。在具体的而言,我要重点所产生的服务器的配置问题。我们将在您的应用程序上请看一看 SSL 终止和此配置的某些副作用。

SSL 终止是一种配置在其中运行代码的 Web 服务器通过发送和接收通信 HTTP,并且没有您的 Web 服务器和您的客户端之间加密和解密数据的一个设备。在这种配置客户端发送和接收 HTTPS 通信。SSL 终止配置是类似于以下内容:
客户端 < — HTTPS — > SSL 设备 < — HTTP — > Web 服务器
现在让我们提出在 Microsoft ASP.NET 2.0 中使用这种配置的两个问题和变通解决此问题的一些方法。

问题 1

当指针悬停在 ASP.NET 2.0 菜单 控件中的菜单项上时, 您会收到以下错误消息:
此页包含既安全又不安全的项。要显示不安全的内容吗?
应用程序应该是安全的、 您使用的 SSL 协议和尚未添加任何控件都呈现为绝对路径返回到 HTTP 地址。这是怎么回事与此消息?

很好地,问题是 Menu 控件发出生成飞出菜单使用 iFrame 对象的某些 JavaScript。您必须为该框架提供一个起始 URL。若要避免对针对非 SSL 方案服务器进行不必要的往返行程,该脚本使用 有关: 空白 url。然而,在浏览器认为这是不安全的地址使您获得上面的错误。有关 in terms of Microsoft Windows SharePoint Services 此问题的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
837850当您单击在文档库中 Windows SharePoint Services 或来自 Microsoft 的 SharePoint 工作组服务中的资源管理器视图时,您会收到"此页包含既安全又不安全的项目"消息
我显式提到了非 SSL 方案,因为如果 Web 服务器接收的 SSL 设备而不是在 HTTPS 通信,Menu 控件发出 JavaScript 将添加到页的 HTTPS 地址设置 iFrame 对象的数据源,在服务器上的代码行。这将启动另一个的请求,但不能错误消息。如果您正在部署到这种类型的环境,您可以强制的 JavaScript 以防止通过将此代码添加到具有 Menu 控件的页的错误消息
 <script runat="server">
   protected override void Render(HtmlTextWriter writer) 
   {
        Page.ClientScript.RegisterStartupScript(typeof(Page), "MenuHttpsWorkaround", 
        Menu1.ClientID + "_Data.iframeUrl='https://myserver/someblankpage.htm';", true);
        base.Render(writer);
   }
</script>
 
理想情况下,您必须在 MasterPage 类或一个 用户控件 类菜单,并可能只需一次添加此代码。

问题 2

当您具有的该 <forms>requireSSL 属性时,您可能会发现的 元素设置为 true,服务器的响应并可重复的重定向到 FormsAuthentication 登录页。这是所致 FormsAuthenticationModule 方法处理 requireSSL 属性的方式的更改。如果您将 requireSSL 属性设置为 true 时,FormsAuthenticationModule 方法将创建具有 安全 属性中设置的 cookie。(这种行为是与在.net Framework 1.1 中相同。您在使用 安全 属性时客户端只将到服务器中传递该 cookie,如果客户端使用 SSL。因为该客户机的确使用 SSL,这就是很好。让我们假设您有这样一个 SecurePage.aspx 页,匿名用户无法访问它。 使用 SSL 协议和 requireSSL 属性,您得到下列通信到 SecurePage.aspx 的初始请求上:
--> 客户端的 SecurePage.aspx 进行 GET 请求。

<— 服务器响应的 HTTP 302 (重定向) 到登录页。

--> 客户端的 Login.aspx 进行 GET 请求。

<— 服务器为 200 与正常响应。 在登录页呈现给客户端。

--> 客户端进行 POST 请求到 Login.aspx。

<— SecurePage.aspx 到服务器用一个 302 (重定向) 进行响应。 设置 Cookie 标头与发送该要在客户端的 安全 属性。

--> 客户端向 SecurePage.aspx 发出 GET 请求。 因为客户端使用 SSL,cookie 将被传递。

<— 服务器响应一个 302 (重定向) 返回到登录页。

您可以在最后一个请求中的重定向获得由于更改 FormsAuthenticationModule 类中的上。若要确定用户是否通过非 SSL 请求传递安全 cookie 的 ASP.NET 2.0 中添加了其他检查。如果 FormsAuthentication.RequireSSL 属性设置为 false,或者如果 Request.IsSecure 属性设置为 true,则 ASP.NET 2.0 返回 FormsAuthenticationTicket 类。
  • 如果在配置文件中 requireSSL 属性设置为 falseFormsAuthentication.RequireSSL 属性设置为 false
  • 如果 Web 服务器接收 SSL 通信 Request.IsSecure 属性设置为 true
因为在这种情况下,Web 服务器不接收 SSL 通信并 requireSSL 属性设置为 true,两项检查返回 false。如此一来 FormsAuthenticationTicket 类,不会返回,并从 Request.Cookies 集合中移除该 cookie。

用户发出的请求是匿名此时,因为服务器还没有尚未验证用户的凭据。该请求通过 ASP.NET 管道,UrlAuthorizationModule 类检查用户是否具有对页的访问。由于匿名用户没有访问 SecurePage.aspx 页,UrlAuthorizationModule 类返回 401 错误消息 ("拒绝访问"),这会导致重定向到登录页。

若要避免此行为,您必须先从该 <forms>删除 requireSSL 属性 配置文件中的标记。然后您必须以编程方式设置 FormsAuthentication 上的 安全 属性中的 cookie。下面的代码这为您完成,FormsAuthentication cookie 和 会话 cookie
void Application_EndRequest(object sender, EventArgs e)
{
     if (Response.Cookies.Count > 0)
     {
          foreach (string s in Response.Cookies.AllKeys)
          {
               if (s == FormsAuthentication.FormsCookieName || s.ToLower() == "asp.net_sessionid")
               {
                    Response.Cookies[s].Secure = true;
               }
          }
     }
}

参考

有关 Menu 控件的详细信息,请访问下面的 Microsoft 开发人员网络 (MSDN) 的网站:
http://msdn2.microsoft.com/en-us/library/2xt3t8a7(vs.80).aspx
有关 requireSSL 属性 FormsAuthentication.RequireSSL 属性的详细信息,请访问下面的 MSDN 网站:
http://msdn2.microsoft.com/en-us/library/system.web.security.formsauthentication.requiressl.aspx
有关 IsSecure 属性 HttpRequest.IsSecureConnection 属性的详细信息,请访问下面的 MSDN 网站:
http://msdn2.microsoft.com/en-us/library/system.web.httprequest.issecureconnection(vs.71).aspx
FormsAuthenticationModule 类有关的详细信息,请访问下面的 MSDN 网站:
http://msdn2.microsoft.com/en-us/library/system.web.security.formsauthenticationmodule.aspx
UrlAuthorizationModule 类有关的详细信息,请访问下面的 MSDN 网站:
http://msdn2.microsoft.com/en-us/library/system.web.security.urlauthorizationmodule.aspx


我希望您发现此信息有助于在您使用 SSL 终止和 Microsoft ASP.NET 时。 请记住支持语音列将为您!与往常一样随意提交所需解决在将来的列的标题上或在使用 Ask For It 窗体的知识库中的想法。

属性

文章编号: 910444 - 最后修改: 2007年11月22日 - 修订: 1.3
这篇文章中的信息适用于:
  • Microsoft ASP.NET 2.0
关键字:?
kbmt kbhowto kbasp KB910444 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 910444
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。
不再更新的 KB 内容免责声明
本文介绍那些 Microsoft 不再提供支持的产品。因此本文按“原样”提供,并且不再更新。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com