【问题标题】:How to implement SSL in asp.net如何在 asp.net 中实现 SSL
【发布时间】:2014-06-11 15:06:37
【问题描述】:

我目前正在开发一个 asp.net mvc 应用程序。我目前正在开发一个登录功能,我的目标是以某种方式实现 SSL,以便我可以将纯文本密码发送到服务器以在那里进行散列。 在我的控制器中,我已将 requireshttps 属性添加到登录操作结果中:

[RequireHttps]//Enforcing SSL in a Web API Controller
    public ActionResult Login()
    {
        return View();
    }

目前它什么都不做,页面应该只显示一个表单,但我稍后会添加从表单获取数据到控制器的功能(很可能通过 ajax 调用)。

但是现在我添加了这个属性,我无法加载登录网页。 然后我找到了本教程并按照 IIS 管理器的说明进行操作:http://www.iis.net/learn/manage/configuring-security/how-to-set-up-ssl-on-iis

现在当我尝试访问该页面时出现此屏幕:

我知道我很可能犯了一个明显的错误,因为这是我第一次接触 SSL 和 IIS,有什么想法吗?

这是我的 IIS 管理器的屏幕截图:

【问题讨论】:

  • 检查您的 IIS 站点绑定并确保它具有端口 443 (https) 绑定。
  • @WeTTTT 添加了我认为正确的 IIS 管理屏幕截图?
  • 您已将 SSL 证书添加到您的 IIS 服务器,并且 Visual Studio 正在那里部署内容,或者您​​正在 Visual Studio 中运行它?
  • IIS 不会将此请求路由到 Web api。相反,它认为它是一个静态文件(参见图像上的消息)。确保 web 配置包含无扩展 uris 的 mvc 映射。
  • @ErikPhilips 我在 Visual Studio 中调试,但在不同的浏览器上进行测试

标签: c# asp.net asp.net-mvc iis ssl


【解决方案1】:

当前有效的解决方案来自以下问题: ASP.NET MVC: How to automatically disable [RequireHttps] on 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;
        filterContext.Result = new RedirectResult(url);
    }
}

现在,当我在 localhost 上进行测试时,它可以正常工作了。 如果托管此站点会发生什么? SSL 会起作用吗?

【讨论】:

  • 如果这是导致问题的 localhost 域,那么实际的非 localhost 域名很可能不会导致任何问题。
猜你喜欢
  • 1970-01-01
  • 2012-10-13
  • 2012-10-21
  • 1970-01-01
  • 1970-01-01
  • 2017-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多