2012-12-03 16 views
2

我跟着這個教程正是本地工作:讓HTTPS來在asp.net應用MVC4

http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx

但是,當我在本地運行,並嘗試從非HTTPS網頁瀏覽(如家庭/索引)和用[RequireHttps]裝飾的頁面我得到通用的「SSL連接錯誤」消息。

我討厭這樣發佈一個通用的問題,但你能想到的任何東西我錯過了什麼?它是一個大的asp.net mvc4應用程序,我在項目中啓用了ssl,它顯示了ssl url。手動導航到ssl網址也不起作用。

HALP!

注:使用IIS快遞與Visual Studio 2012

%的評論,我得到的是無法建立SSL連接的錯誤。

+0

我想你應該擴展你的意思是_「通用SSL連接錯誤」_。無法建立? Bad/untrusted cert?,你走多遠?港口443?如果是這樣,你是否認同? – EdSF

+0

它會帶我到「https:// localhost」然後給我錯誤。我確實按照鏈接中的步驟執行了makecert命令。 – ledgeJumper

回答

5

本地測試時,您不應該使用HTTPS。我創建了自己的Https過濾器,它將忽略本地主機中的所有本地流量,只能在分段和實時環境中使用。您可以修改代碼以適合您的需要。

public class RequireSSLAttribute : FilterAttribute, IAuthorizationFilter { 
    public virtual void OnAuthorization(AuthorizationContext filterContext) { 
     if(filterContext == null) { 
      throw new ArgumentNullException("filterContext"); 
     } 

     if(!filterContext.HttpContext.Request.IsSecureConnection) { 
      HandleNonHttpsRequest(filterContext); 
     } 
    } 

    protected virtual void HandleNonHttpsRequest(AuthorizationContext filterContext) { 
     if(filterContext.HttpContext.Request.Url.Host.Contains("localhost")) return; 


     if(!String.Equals(filterContext.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase)) { 
      throw new InvalidOperationException("The requested resource can only be accessed via SSL"); 
     } 

     string url = "https://" + filterContext.HttpContext.Request.Url.Host + filterContext.HttpContext.Request.RawUrl; 
     //ignore if the request is from a child action 
     if(!filterContext.IsChildAction) { 
      filterContext.Result = new RedirectResult(url); 
     } 
    } 
} 

這是你如何使用它......

[RequireSSL(Order=1), Authorize(Order=2)] 
public PartialViewResult AccountHeader() { 

blah...blah... 

} 
3

您需要將SSL證書添加到您的IIS站點實例。 要創建certifiacte並將其添加到IIS7,請嘗試以下教程:http://technet.microsoft.com/en-us/library/cc753127(v=ws.10).aspx

創建後,您可以將其添加到您的網站。在IIS中打開你的網站 - >綁定 - >添加並添加新的主機頭。選擇https,端口443並選擇創建的證書。

+0

我應該提到我正在使用IIS Express,這是否也適用於此? – ledgeJumper

+0

如果您打算使用端口443,則只需創建一個證書。否則,只需使用IIS Express,然後使用特定的** URL和PORT **(無證書)例如'https:// localhost:44300 /'將在本地開發中工作。 – EdSF

4

我知道這已經回答了,但我想我會指出原來錯誤的原因,它的其他答案省略。

當啓用IIS上SSL快遞,您的網站託管在2個端口,1個用於HTTP,另一個用於HTTPS。在Visual Studio中調試時,通常顯式指定端口。您網站上的鏈接可能不會指定端口號,因此,當您從普通http頁面鏈接到https頁面時,端口號碼不會更改,並且您將在普通http端口上請求https頁面。這就是你得到SSL連接錯誤的原因。

在真實服務器的端口號應該是含蓄的,所以這個問題不應該,但你需要確保你在本地調試時使用正確的端口。