2010-03-06 43 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安全區域一旦被認證成功。