3

我们在负载均衡器上使用 Stunnel(去除 SSL)和 HAProxy - 然后通过 HTTP 向 IIS 发送请求。

我们遇到的问题是我们希望我们的站点 (ASP.NET) 以安全的方式设置 cookie - 即将 requireSSL 属性设置为 true。

当我们设置此属性并向站点发出 HTTPS 请求时,我们收到此错误:

The application is configured to issue secure cookies. These cookies require the browser to issue the request over SSL (https protocol). However, the current request is not over SSL.

如果请求来自负载均衡器的 SSL,是否可以信任网络服务器?或者这不是问题,因为它只能通过 SSL 访问我们的网站(只有 443 是开放的)?

4

2 回答 2

2

而不是这个:

FormsAuthentication.SetAuthCookie(email, false);

试试这个:

var cookie = FormsAuthentication.GetAuthCookie(email, false);
cookie.Secure = true;
HttpContext.Current.Response.Cookies.Add(cookie);

如果您使用的是 ASP.NET MVC,您还可以使用全局操作过滤器,该过滤器在响应中的所有 cookie 上设置安全标志

于 2011-06-16T21:52:56.410 回答
2

对于 ASP.NET MVC 3 用户 - 我们是,您还可以使用我放在一起的以下 GlobalFilter 来处理这个问题 - 然后可以保护任何发回的 cookie:-

namespace MyNamespace
{
    public class SecureCookiesAttribute : FilterAttribute, IResultFilter
    {
        public void OnResultExecuting(ResultExecutingContext filterContext)
        {
            foreach (string cookieName in filterContext.HttpContext.Response.Cookies.AllKeys)
                filterContext.HttpContext.Response.Cookies[cookieName].HttpOnly = true;

            if (filterContext.HttpContext.Request.IsLocal)
                return;

            foreach (string cookieName in filterContext.HttpContext.Response.Cookies.AllKeys)
                filterContext.HttpContext.Response.Cookies[cookieName].Secure = true;
        }

        public void OnResultExecuted(ResultExecutedContext filterContext) { }
    }
}

这将在任何 cookie 上设置 HTTPOnly 标志,然后如果请求来自非本地源,它还将设置安全标志。这允许我们通过 HTTP 而不是 HTTPS 进行本地调试(但如果您所做的一切都是通过 HTTPS,您可以简单地删除此检查)。

于 2011-06-17T08:47:11.327 回答