2

我完全按照本教程进行操作:

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

但是,当我在本地运行并尝试从非 https 页面(如主页/索引)导航到我用 [RequireHttps] 装饰的页面时,我会收到通用的“SSL 连接错误”消息。

我讨厌发布这样一个笼统的问题,但你能想到我错过了什么吗?这是一个大型的 asp.net mvc4 应用程序,我在项目中启用了 ssl,它显示了 ssl url。手动导航到 ssl url 也不起作用。

停!

注意:在 Visual Studio 2012 中使用 IIS Express

根据评论,我得到的错误是无法建立 SSL 连接。

4

3 回答 3

5

在本地测试时不应该使用 Https。我创建了自己的 Https 过滤器,它将忽略 localhost 中的所有本地流量,并且仅适用于登台和实时环境。您可以修改代码以满足您的需要。

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...

}
于 2012-12-04T03:01:26.760 回答
4

我知道它已经回答了,但我想我会指出原始错误的原因,其他答案省略了。

当您在 IIS Express 上启用 SSL 时,您的站点托管在 2 个端口上,1 个用于 http,另一个用于 https。在 Visual Studio 中调试时,通常会明确指定端口。您网站上的链接可能没有指定端口号,因此当您从普通 http 页面链接到 https 页面时,端口号不会更改,您将在普通 http 端口上请求 https 页面。这就是您收到 SSL 连接错误的原因。

在真实的服务器上,端口号应该是隐式的,所以问题不应该出现,但是您需要确保在本地调试时使用正确的端口。

于 2014-03-18T09:09:52.293 回答
3

您需要在 IIS 中将 ssl 证书添加到您的站点实例。要创建证书并将其添加到 IIS7,请尝试本教程:http ://technet.microsoft.com/en-us/library/cc753127(v=ws.10).aspx

创建后,您将能够将其添加到您的网站。在 IIS '你的网站'中打开 -> 绑定 -> 添加并添加新的主机头。选择 https,端口 443 并选择创建的证书。

于 2012-12-03T18:26:49.383 回答