【问题标题】:Enabling SSL on cookies for live environments and non SSL on dev environments在实时环境的 cookie 和开发环境的非 SSL 上启用 SSL
【发布时间】:2010-11-09 12:40:06
【问题描述】:

基本上,我的网站中有一个要求,这意味着必须保护所有 cookie。我正在尝试保护 FormsAuthentication cookie,但是,我希望它在我的本地开发站点上我不必设置 SSL,但是实时站点仍将保护 cookie。

此实时/开发状态存储在配置 xml 文件中。此文件包含运行站点的每台计算机的设置。它可以通过 Config.IsSecure 访问

if (Config.IsSecure)
{
    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, login.Username, DateTime.Now, DateTime.Now.AddMinutes(30), false, "User", FormsAuthentication.FormsCookiePath);

    string cookieStr = FormsAuthentication.Encrypt(ticket);
    HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, cookieStr);
    cookie.Path = FormsAuthentication.FormsCookiePath;


    System.Configuration.Configuration configuration = WebConfigurationManager.OpenWebConfiguration("~");
    AuthenticationSection authenticationSection = (AuthenticationSection)configuration.GetSection("system.web/authentication");
    FormsAuthenticationConfiguration formsAuthentication = authenticationSection.Forms;
    formsAuthentication.RequireSSL = true;
    cookie.Secure = true;
    configuration.Save()
}

FormsAuthentication.SetAuthCookie(login.Username, false);

所以我在“保存”部分收到错误消息。说有临时文件无法访问。

知道如何解决这个问题吗?

古普雷特

【问题讨论】:

  • 最简单的答案是在生产中使用 IIS 规则保护您的站点,该规则将强制所有请求为 HTTPS,然后使用配置转换将表单身份验证配置的 requireSSL 属性设置为 true。
  • 嘿,克里斯,我将如何进行“使用配置转换将表单身份验证配置的 requireSSL 属性变为真”

标签: c# asp.net cookies ssl


【解决方案1】:

我不太明白您要做什么,或者为什么您必须编写自定义代码才能做到这一点。我相信您可以将表单身份验证配置为在 web.config 中对 cookie 使用 SSL。然后只需使用不同的 web.config 进行实时和开发。

requireSSL 属性应该完全符合您的要求? (将 cookie 设置为仅安全,以便浏览器仅在安全连接时返回表单身份验证 cookie)。

类似(在 web.config 中)

<authentication mode="Forms">
  <forms  timeout="30" loginUrl="/MyLogin.aspx" protection="All" requireSSL="True" />
</authentication>

【讨论】:

    【解决方案2】:

    如果您不想管理两个 web.config 文件,另一种选择是在本地计算机上简单地安装证书 - 这真的不难。

    我认为How to create a self-signed wildcard SSL certificate for IIS 6? 的答案有你需要的信息。只需确保正确设置主机名 - 您的机器名称或 localhost,否则在尝试连接到您的站点时会收到警告。

    如果您使用的是 VS2010/.net 4,也可以在 web.config 上执行转换,我相信:http://msdn.microsoft.com/en-us/library/dd465318.aspx

    【讨论】:

    • 我试图避免在本地机器上创建证书
    【解决方案3】:

    嗯。如果不保护整个网站,您就无法保护 cookie。 cookie 是使用下载页面的标准 HTTP 请求交换的,因此每个页面都必须是安全的。

    您要保护的是登录表单...但这不是 cookie。如果您在身份验证后重定向回 http 站点,cookie 仍然是不安全的。

    更新:

    HttpCookie.Secure 只做一件事——如果没有 SSL,它不会将 cookie 传输到客户端。如果该站点是通过 HTTP 访问的,则生成的 cookie 标头将不包含您的 cookie。 HttpCookie.Secure 不会强制站点切换到 SSL,如果我正确理解文档,它只会默默地破坏您的代码。

    【讨论】:

    • 该站点将仅在开发环境中通过 http 访问。整个站点在live环境中只运行在SSL上
    • 那么问题出在哪里?使用 URL 重写器强制 https-only,或者只允许 https 绑定,不允许 http。你不需要编写任何代码
    • 我不想在开发机器上强制执行 SSL https
    • 所以不要 - 只需更改配置。您为什么要在登录过程中更改配置?
    • 设置 cookie 在 HTTPS 下安全,在 HTTP 下不安全,无需设置 web.configs 的人为因素
    猜你喜欢
    • 2018-07-03
    • 1970-01-01
    • 2014-07-14
    • 2014-04-02
    • 2020-10-06
    • 2016-03-16
    • 2015-03-02
    • 2013-02-20
    • 2018-06-04
    相关资源
    最近更新 更多