代码之家  ›  专栏  ›  技术社区  ›  Dan Atkinson

启用SSL时,IIS Express默认为https的44300端口

  •  35
  • Dan Atkinson  · 技术社区  · 14 年前

    https://localhost/ https://localhost:44300/ .

    链接是通过以下方式生成的:

    <%= Html.ActionLink("Index", "Index", "Home", new { @action = "https://" + Request.Hostname + Url.Action("Index", "Home") }) %>
    

    @action 关键字可以覆盖生成的路由,但这意味着应用程序似乎需要知道任何非标准端口(例如44300)。

    问题是我要写一些东西来解决一个只有在开发环境中才会出现的问题。

    所以我的问题是。。。 如何将端口更改为443并使IIS Express与之类似?

    我的网站配置如下:

    <site name="MySite" id="2" serverAutoStart="true">
      <application path="/">
        <virtualDirectory path="/" physicalPath="C:\Inetpub\MySite" />
      </application>
      <bindings>
        <binding protocol="http" bindingInformation=":80:" />
        <binding protocol="https" bindingInformation=":44300:" />
      </bindings>
    </site>
    

    非常感谢。

    更新:

    这个问题已经解决了 answered

    5 回复  |  直到 5 年前
        1
  •  28
  •   Dan Atkinson    7 年前

    这个问题已经解决了 answered Divya在IIS论坛上发表的。

    以下是netsh的命令:

    默认情况下安装。如果你还想更改证书, 商店): netsh http show sslcert . 在输出中搜索 端口44300并复制certhash和appID。

    netsh http delete sslcert ipport=0.0.0.0:44300

    3) 为端口443添加一个新条目,步骤中复制了certhash和appID 1 netsh http add sslcert ipport=0.0.0.0:443 certhash=<certhash> appid=<appid>

    在中配置条目之后http.sys系统,您需要重新启动http 更改生效的服务。

    net stop http

    net start http

    正如其他人所指出的,有几种很好的方法可以获得SSL证书。

    netsh http show sslcert > output.txt
    

    或(我的首选方法):

    netsh http show sslcert | clip
    
        2
  •  4
  •   Community c0D3l0g1c    7 年前

    由于我花了很多时间在这个话题上,我想分享我的发现。我从我的另一个职位转载片段减去代码。一些背景和解释:

    ==========================================

    经过研究,我能够用IIS Express和控制器类的重写来解决这个问题 OnAuthorization

    1. 参考1 授权 只在操作级别工作,不在控制器类级别工作
    2. makecert ), netsh 命令,并且,为了使用端口80和端口443,我需要以管理员身份启动VS2010,这是我不赞成的。

    所以,我提出了一个非常简单的解决方案,有以下条件:

    1. 我想能够使用 RequireHttps 控制器类或操作级别的属性

    2. 我希望MVC在 属性存在,如果不存在则使用HTTP

    3. 我希望能够使用IIS Express分配的任何HTTP和HTTPS端口

    4. 我可以重用iisexpress的自签名SSL证书,并且我不在乎是否看到无效的SSL提示

    =========================================

    您可以在这里找到我的解决方案/代码==> ASP.NET MVC RequireHttps in Production Only

        3
  •  2
  •   Pierre-Alain Vigeant    12 年前

    端口44300是连续的:00表示它是您配置为启用SSL的第一个应用程序;01将是第二个应用程序,依此类推。

    因为我也要求我的网站只在HTTPS中添加 [RequireHttps] 全局属性,调试时遇到一些问题。启动时,它会自动重定向到 https://localhost/

    来解决这个问题 ,我只是创建一个新的 RequireHttpsAttribute 指定端口的

    #if DEBUG
    public class RequireHttpsAttribute : System.Web.Mvc.RequireHttpsAttribute
    {
        protected override void HandleNonHttpsRequest(System.Web.Mvc.AuthorizationContext filterContext)
        {
            base.HandleNonHttpsRequest(filterContext);
    
            var result = (RedirectResult)filterContext.Result;
    
            var uri = new UriBuilder(result.Url);
            uri.Port = 44301;
    
            filterContext.Result = new RedirectResult(uri.ToString());
        }
    }
    #endif
    

        4
  •  0
  •   Mariusz Pawelski    9 年前

    丹的回答是对的,但如果您在配置IIS Express以在标准端口上使用http和https为您的网站提供服务时仍然存在问题,那么下面是一个很好的教程,可以一步一步地指导您:

    http://www.lansweeper.com/kb/54/How-to-configure-SSL-in-IIS-Express.html

    在我的情况下,我不小心删除了IIS Express证书。我认为它是第一次在visualstudio中使用SSL时生成的(F4在选定的项目上显示“获取属性”窗口并选中“启用SSS”复选框)。本教程指导我如何创建证书并修复它。

        5
  •  0
  •   Alex Vaghin    8 年前

    public class RequireSSLAttribute: RequireHttpsAttribute
        {
            protected override void HandleNonHttpsRequest(AuthorizationContext filterContext)
            {
                base.HandleNonHttpsRequest(filterContext);
    
                 if (filterContext.HttpContext.Request.Url.Host.ToLower().Equals("localhost"))
                {
                    // redirect to HTTPS version of page
                    string localhostSSLPort = System.Configuration.ConfigurationManager.AppSettings["localhostSSLPort"];
                    string url = "https://" + filterContext.HttpContext.Request.Url.Host + ":" + localhostSSLPort + filterContext.HttpContext.Request.RawUrl;
                    filterContext.Result = new RedirectResult(url);
                }           
            }
        }
    

    <appSettings>    
        <add key="localhostSSLPort" value="44300"/>
      </appSettings>
    

    然后你像这样使用它

        [RequireSSL]            
        public class AdminController : Controller
        {
                  ...
        }