启用S​​SL时,IIS Express默认为端口44300 for HTTPS

时间:2010-09-11 12:02:55

标签: asp.net-mvc ssl https iis-express

当您最初设置IIS Express以启用SSL时,它会将端口默认为44300.不幸的是,当我尝试在https://localhost/上访问我的网站时,除非我使用端口号44300,否则它不起作用 - 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>

非常感谢提前。

更新

Divya在IIS论坛上提出了answered这个问题。

5 个答案:

答案 0 :(得分:28)

Divya在IIS论坛上提出了answered这个问题。

  

在WebMatrix中为网站启用SSL后,默认为端口44300并在后台执行所有绑定。我希望您尝试在配置文件中将此端口更改为443。完成并保存后,您还需要修改http.sys中的绑定。您需要删除端口44300的现有条目,并添加端口443的条目。   为此,您可以使用httpcfg(WinXp / Win2003)或“netsh http”(WinVista / Win2K8 / Win7)。   以下是netsh的命令:

     

1)获取44300的现有条目的appid和certhash(我   假设,您将使用与WebMatrix相同的证书   默认安装。如果你想更改证书,   从证书中获取证书的证书哈希值   商店):netsh http show sslcert。在输出搜索中输入   端口44300和复制certhash和appID。

     

2)删除44300的条目: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

答案 1 :(得分:3)

由于我花了很多时间在这个主题上,我想分享我的发现。我正在从我的其他帖子中删除段代码。一些背景和解释:

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

在研究了aroud之后,我能够用IIS Express解决这个问题并覆盖Controller类的OnAuthorization方法(Ref#1)。我也选择了Hanselman推荐的路线(参考文献#2)。但是,由于两个原因,我对这两种解决方案并不完全满意:

  1. Ref#1的OnAuthorization仅适用于操作级别,而不适用于控制器级别
  2. Ref#2需要大量设置(Win {SDK for makecert),netsh命令,并且为了使用端口80和端口443,我需要以管理员身份启动VS2010,我皱眉头。
  3. 所以,我提出了这个解决方案,在以下条件下非常简单:

    1. 我希望能够在Controller类或操作级别使用RequireHttps属性

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

    3. 我不想以管理员身份运行Visual Studio

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

    5. 我可以重复使用IIS Express的自签名SSL证书,我不在乎我是否看到无效的SSL提示

    6. =========================================

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

答案 2 :(得分:2)

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

由于我还要求我的网站只通过添加[RequireHttps]全局属性来使用HTTPS,因此调试时遇到了一些问题。启动时,它会自动重定向到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

仅在调试时使用此类。部署到IIS7后,您应该使用Url重写来重定向到HTTPS。

答案 3 :(得分:0)

Dan的答案是正确的,但是如果您仍然在配置IIS Express以便在标准端口上使用http和https为您的网站提供服务时遇到问题,那么这是一个很好的教程,可以指导您一步一步:

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

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

答案 4 :(得分:0)

创建课程

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