2010-03-06 80 views
6

背景:我有一个应包含公共和成员区域的asp.net web应用程序项目。现在我想实现一个SSL描述来保护客户端和服务器之间的通信。 (在大学我们有一个不安全的无线网络,你可以使用wlan嗅探器来读取用户名/密码,我不希望我的应用程序有这个安全问题,所以我想到了一个ssl描述)如何使用SSL证书保护登录和成员区域?

应用程序正在IIS 7.5上运行。是否有可能有一个Web应用程序具有不安全的页面(如公共区域)和一个安全区域(如会员区域,需要登录)?如果是的话,我怎样才能使这些领域之间的沟通变得更加松散?

示例: 我的web应用托管在http://foo.abc上。我有页面,如http://foo.abc/default.aspxhttp://foo.abc/foo.aspx

在同一个项目中有一个页面,如/member/default.aspx,它受页面http://foo.abc/login.aspx上登录的保护。

所以我需要实现SSL的页面/login.aspx/member/

我怎么能这样做的所有网页?我刚刚发现如何在IIS 7.5中创建SSL证书以及如何将这种绑定添加到Web应用程序。我怎么能告诉我的web应用程序使用https调用哪个页面,而不使用http。那里的最佳做法是什么?

回答

3

从这里How to use HTTPS in an ASP.Net Application

后你会得到SSL设置/安装,你 想做某种重定向在 罗杜松子酒页面https://。然后 无论用户在验证后发送给 的任何页面,它可以只是 http://。

Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender 

    If Request.IsSecureConnection = False And _ 
     Not Request.Url.Host.Contains("localhost") Then 

     Response.Redirect(Request.Url.AbsoluteUri.Replace("http://", "https://")) 
    End If End Sub 

这可能是更容易实现 母版页上,或只是你 需要HTTPS页面。通过检查 “localhost”,您将避免在您的测试环境中出现 错误 (除非您的测试服务器的名称比检查: “mytestservername”的其他 )。

3

我不使用.net,但我们的网站具有类似的设置,其中一些页面未加密并使用http提供服务,而一些页面则使用https提供服务。以下是我们所做的一些事情......希望他们有帮助。

  1. 您需要将配置传递给您的代码,以便知道http或https部分的基本URI。例如。如果你的服务器是foo.bar,你需要你的代码知道安全的页面在https://foo.bar:xxx/ ...,并在http://foo.bar/不安全的网页...

  2. 你可以用一些重定向使您的生活配置您的服务器更轻松。例如。如果在服务器配置中,在端口80区域中,将/ xxx重定向到端口443/xxx,那么在http页面中,只需使用像/ xxx这样的相关URL,而不必包含基本URI。反之亦然,您可以在端口443配置重定向/ yyy设置为端口80/yyy,然后在您的https页面中,您可以使用相对URL,如/ yyy

  3. 在http和https页面之间发送:重定向发布,所以你必须在你的表单元素中使用http或https页面的基本URI。即在您的http页面中,如果您发布到https,则必须在表单元素的action属性中指定https基本URI - 这是以上第1点的原因。

  4. 很明显,http和https代码都应该检查cookie以确定用户是否已在https页面中登录,但是您希望检查安全cookie--浏览器只会以https连接发送的那些cookie 。您的纯文本cookie可能会被嗅探。

  5. AJAX ---这很棘手。由于Javascript的安全模型,您无法进行跨域AJAX。所以,这意味着如果你在http中,你不能对https进行AJAX,反之亦然;浏览器将端口更改视为不同的域。有一些解决方法,比如使用隐藏的iframe等,但这些解决方案相当复杂,并且常常存在安全漏洞。

2

只需谨慎一点,您不应该在生产站点上真正使用自签名证书。理想情况下,您应该从可信任的CA(证书颁发机构)获取一个。伟大的名字是Verisign和Thwate,但还有其他更便宜的CA。

如果您在现场使用自签名证书,您的用户将收到一条难看的警告消息,询问他们是否希望继续。

在将用户重定向到https的区域,我通常只是转发我要保护的页面来说(例如,如果用户浏览到http://domain.com/login.aspx,我会立即将请求重定向到https://domain.com/login.aspx的Response.Redirect(.. 。)),然后带他们出去的SSL安全区域一旦被认证成功。